VBA : wie erstelle ich Kombinationen mit einem if?
Moin!
Ich tue mich extrem schwer mit dem lernen, aber ich versuchs weiter.
Ich habe nun versucht etwas zu erstellen, das in excel wie die "wenn" funktion, funktioniert, aber ich bekomme es nicht hin.
Ich habe eine Lösung gefunden, wie ich kombinationen erstelle und möchte diese nun verfeinern.
Mir geht es darum das B und C kombiniert werden, aber nichts doppelt ist( aber nur wenn es spalten übergreifen ist!)
Wenn da jemand helfen kann und lust, auf eine umfangreiche erklärung hat, dann freut mich das, ansonsten versuche ich mir die erklärung selber bei zu bringen. :)
Sub Alle() 'Name
Dim xDRg1, xDRg2 As Range 'Namen der Tabelle als "fortlaufenden bereich"
Dim xRg As Range '
Dim xStr As String ' String für das leerzeichen
Dim xFN1, xFN2 As Integer
Dim xSV1, xSV2 As String
Set xDRg1 = Range("B2:B11") 'Tabelle 1
Set xDRg2 = Range("C2:C11") 'Tabelle 2
xStr = " " 'Trennzeichen
Set xRg = Range("L5") 'Zelle für die Ausgabe
' wenn zeichen 1&2 aus der ersten Zelle in "B" "nicht gleich" Zeichen 1&2 oder 4&5( wegen dem leerzeichen)aus der ersten Zelle aus "C",
' oder wenn zeichen 4&5 aus der ersten Zelle in "B" "nicht gleich" Zeichen 1&2 oder 4&5( wegen dem leerzeichen)aus der ersten Zelle aus "C" sind,
' dann soll: ( ansonsten überspringen)
For xFN1 = 1 To xDRg1.Count
xSV1 = xDRg1.Item(xFN1).Text
For xFN2 = 1 To xDRg2.Count
xSV2 = xDRg2.Item(xFN2).Text
xRg.Value = xSV1 & xStr & xSV2
Set xRg = xRg.Offset(1, 0) 'Schreiben in die Zelle
Next 'Ende der For Schleife
Next 'Ende der For Schleife
End Sub
2 Antworten
Zunächst einmal würde ich die Zellinhalte mit der Split-Funktion aufteilen.
Dim links() As String, rechts() As String
links = Split(BereichLinks.Text)
rechts = Split(BereichRechts.Text)
Da VBA6 (noch) keine Contains-Funktion hat, würde ich mir selber eine schreiben. Damit dann prüfen, ob die Inhalte von links im rechten "Array" enthalten sind und umgekehrt. (Bzw. ich würde über "Mengenfunktionen" wie Union, Intersection, Except gehen, die es in .NET gibt, aber eben noch nicht in VB(A)6. Aber das wäre für einen Anfänger zu technomanisch.) Oder eben doch wieder zwei geschachtelte Schleifen.
Dim i As Integer, j As Integer, hatUeberschneidung As Boolean
hatUeberschneidung = False
For i = 0 To UBound(links)
For j = 0 To UBound(rechts)
If links(i) = rechts(i) Then
hatUeberschneidung = True
Exit For
End If
Next
If hatUeberschneidung Then Exit For ' zwei Ebenen gleichen Schleifentyps verlassen geht nicht so ohne Weiteres
Next
If Not hatUeberschneidung Then
' Einfügen
End If
Und für Einfügen:
Cells(currentRow, insertionCol).Text = BereichLinks.Text & " " & BereichRechts.Text
currentRow = currentRow + 1
IF ( ( Left(B2,2) <> Left(C2,2) AND Left(B2,2) <> Right(C2,2)) OR ( .... ) ) Then
....
Else
....
End If
bastel mal
ggf halt für B2 und C2 entsprechend etwas nutzen das auch die werte der Zelle genommen wird .