AW: Kombinationen aus Wert einer Variablen
13.02.2009 15:19:00
Franz
Hallo Dierk,
Stunden später ... und ich kriege es einfach nicht hin.
Ich wollte deinen Code noch um eine weitere Flexibilität erweitern.
Zwischen die ";" sollte noch die Möglichkeit bestehen Werte mit Komma separiert einzugeben.
Dieses sollte dann nicht von 1 bis n durchgezählt werden sondern die einzelnen Elemente z.B. 2 und 5 von 2,5 in "9;2,5;9
Nun läuft mir der "n"-Zähler über, sogar wenn ich mit dem unten angegebenen Code gar keine ","-separierten "arrValues" verarbeite und ich kann nicht erkennen warum.
Die verschachtelte Schleife bleibt mein Problem -- ich denke scheinbar nicht digital genug ;-)
Gruß,
Franz
Sub yyy2()
Dim arrValues
Dim i As Long
Dim x As Integer, n As Long, z As Long, y As Long, w As Long, v As Long
Dim arrDaten(), arrTmp()
Dim strTmp As String
z = 1
y = 1
w = 1
Worksheets("Tabelle4").Cells().ClearContents
'Werte-Array
' arrValues = Split(Worksheets("Tabelle2").Range("A1"), ";")
arrValues = Split("1;1,3;5", ";")
'Anzahl der Kombinationen
For i = 0 To UBound(arrValues)
'ersetzt z = z * arrValues(i) durch:
'Komma-separierte:
arrValuesKomma = Split(arrValues(i), ",")
If UBound(arrValuesKomma) = 0 Then
z = z * arrValues(i)
AnzStufen = arrValues(i)
Else
z = z * (UBound(arrValuesKomma) + 1)
AnzStufen = UBound(arrValuesKomma) + 1
End If
Next
'z = AnzKombinationen
If z > Rows.Count Then
MsgBox "Zu viele Kombinationen", vbOKOnly + vbCritical, "Fehler"
Exit Sub
End If
ReDim arrTmp(1 To z, 1 To UBound(arrValues) + 1)
ReDim arrDaten(1 To z, 1 To 1)
For x = 0 To UBound(arrValues) '1 bis AnzFaktoren
n = 0
'Komma-separierte:
arrValuesKomma = Split(arrValues(x), ",")
If UBound(arrValuesKomma) = 0 Then
y = y * arrValues(x)
Else
y = y * (UBound(arrValuesKomma) + 1) 'nur bei diff. Faktorstufen
End If
'abgelöst wurde dafür: y = y * arrValues(x)
'y = Anzahl Faktorstufen des gerade bearbeiteten Faktors
'arrValuesKomma() = Datenfeld mit den Faktorstufen gerade bearbeiteten Faktors
'v = Zähler für 1 bis ?
For v = 1 To w
'z = 1 bis AnzFaktorstufen!
For z = 1 To AnzStufen ''arrValues(x) ''
For i = 1 To (UBound(arrDaten) / y)
n = n + 1
arrTmp(n, x + 1) = z
Worksheets("Tabelle4").Cells(n, x + 1) = z
Next
Next z
Next v
If UBound(arrValuesKomma) = 0 Then
w = w * arrValues(x)
Else
w = w * (UBound(arrValuesKomma) + 1) 'nur bei diff. Faktorstufen
End If
Next x
For i = 1 To UBound(arrTmp)
strTmp = ""
For x = 1 To UBound(arrTmp, 2)
strTmp = strTmp & arrTmp(i, x) & "."
Next x
strTmp = Left(strTmp, Len(strTmp) - 1)
arrDaten(i, 1) = strTmp
Next i
Worksheets("Tabelle2").Columns(3).ClearContents
Worksheets("Tabelle2").Columns(3).NumberFormat = "Text"
Worksheets("Tabelle2").Cells(1, 3).Resize(UBound(arrDaten)) = arrDaten
End Sub