Ableitung einer Formel für VBA
Hallo Leute, ich habe folgendes funktionierendes Codefragment, welches abwecheseln de den Inhalt aus den Spalten A und B in einer Textbox darstellt:
Sub MehrereSpaltenZeilenweiseInTextbox()
Dim i As Long, j As Long
Dim varQ As Variant, varZ() As Variant
varQ = Range("A1:B9").Value
ReDim varZ(1 To UBound(varQ, 1) * UBound(varQ, 2))
For i = 1 To UBound(varQ, 1)
For j = 1 To UBound(varQ, 2)
varZ(i * UBound(varQ, 2) - UBound(varQ, 2) + j) = varQ(i, j)
Next j
Next i
TextBox1 = Join(varZ, vbNewLine)
End Sub
Das entscheidende ist diese Formel:
varZ(i * UBound(varQ, 2) - UBound(varQ, 2) + j) = varQ(i, j)
Wie kann ich diese Formel herleiten? Hat jemand eine Idee? Die Formel ist richtig, alles funktioniert toll, aber wie leite ich sie her?
2 Antworten
vielleicht wird es etwas klarer, wenn du für die UBound-Funktionen die konkreten Zahlenwerte einsetzt: UBound(varQ, 1) = 9 (1:9) und UBound(varQ, 2) = 2 (A:B), also
varZ( i * 2 - 2 + j) , oder noch besser: varZ( (i-1) * 2 + j ) j läuft immer von 1 nach 2 für jedes i.
Diese Art Indexberechnung brauchst du immer, wenn du daten von einem höher dimensioniertem Feld auf ein Feld mit niedriger dimension umsetzen willst.
Wie selbst herausfinden? Vielleicht anhand eines konkreten Beispiels: (i,j) -> z
(1,1)->1, (1,2)->2, (2,1)->3, (2,2)->4, (3,1)->5, (3,2)->6, etc.
Was genau willst du herleiten? Die Berechnung des Index? Setzte mal Haltepunkte und gehe die Schleife Schritt für Schritt durch, dann siehst du, dass du damit Anhand der Position im "alten" Array eine Position im Ausgabe-Array berechnest.