Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1536to1540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

[VBA] Array1, Array2,... mit variable im Namen

[VBA] Array1, Array2,... mit variable im Namen
31.01.2017 21:55:05
Nils
Hallo zusammen,
ich habe 16 Arrays mit den Namen:
Stand1, Stand2, Stand3, ... , Stand16
Für jedes Array habe ich eine Schleife:

If Not IsEmpty(Stand1) Then
If UBound(Stand1) = 0 Then
Cells(Stand1(i), "L") = "Nutzlos"
Else
For i = 0 To UBound(Stand1) - 1
If Cells(Stand1(i), "C")  "Ein" Then
If i = 0 Then
Cells(Stand1(i), "L") = "Nutzlos"
End If
If Cells(Stand1(i + 1), "C")  "Ein" Then
Cells(Stand1(i + 1), "L") = "Nutzlos"
End If
End If
Next
End If
End If
Danach kommt die Selbe Schleife für Array 2... usw.
Kann man das zusammenfassen?

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: [VBA] Array1, Array2,... mit variable im Namen
31.01.2017 22:19:23
Daniel
Hi
du kannst ein eindimensionales Array Stand(1 to 16) anlegen und dann als Elemente in dieses Array wieder Arrays einhängen:
Stand(1) = Array(1, 2, 3)
auf die Einzelnen Elemente kannst du dann so zugreifen:
x = Stand(1)(2)
das entspricht dann im Prinzip einer Perlenkette, bei der du anstelle jeder Perle eine weitere Perlenkette einhängst.
für deinen Code dann etwa so:
for s = 1 to 16
If Not IsEmpty(Stand(s)) Then
If UBound(Stand(s)) = 0 Then
Cells(Stand(s)(0), "L") = "Nutzlos"
Else
For i = 0 To UBound(Stand(s)) - 1
If Cells(Stand1(s)(i), "C")  "Ein" Then

Gruß Daniel
Anzeige
Netter Vgl, Daniel! ;-) owT
31.01.2017 22:36:37
Luc:-?
:-?
AW: [VBA] Array1, Array2,... mit variable im Namen
01.02.2017 15:25:17
Nils
Das scheint die Lösung zu sein.
Und die Perlenketten, die ich anstelle jeder Perle anhänge können unterschiedlich lang sein?
Ich scheitere aktuell die einzelnen Arrays Stand(s) zu befüllen. Egal wie ich es drehe, ich bekomme das nicht hin.
In Spalte B steht der Stand mit Wert 1 bis 16. Die Länge der Liste wird mit Anzahl ermittelt. Für jede Zeile mit Stand = 1 soll er die Zeilennummer in das Array Stand(1) schreiben, für jede Zeile mit Stand = 2 soll er die Zeilennummer in das Array Stand(2) schreiben, usw. Leider bricht die Schleife nach dem ersten Eintrag ab, Weil ich die Arraygrößen nicht verändern kann, da Stand (1 to 16) schon deklariert ist. ReDim Preserve geht nicht...

Sub ArraysFuellen()
Dim Stand(1 To 16) As Variant
Dim Zeile, Nummer, i, j, x_alt, x_neu  As Integer
' Nur zum testen
Dim Anzahl As Integer
Anzahl = Application.WorksheetFunction.CountA(ActiveSheet.Range("A:A"))
For Zeile = 2 To Anzahl
Nummer = Cells(Zeile, "B")
If IsEmpty(Stand(Nummer)) Then
Stand(Nummer) = Array(Zeile)                            'Ersten Zeilenwert eintragen
Else
x_alt = UBound(Stand(Nummer))
ReDim Preserve Stand(Nummer, x_alt + 1)                 'Array Dimension um 1 erhöhen
x_neu = UBound(Stand(Nummer))
Stand(Nummer)(x_neu) = Zeile                        'Nächsten Zeilenwerte hinzufügen
End If
Next
End Sub

Anzeige
AW: [VBA] Array1, Array2,... mit variable im Namen
01.02.2017 15:51:14
Daniel
Hi
würde ich für die Befüllung so lösen:
Schritt 1:
erstmal alle Zeilennummern aufnehmen
hierbei ist Stand() ein normales, eindimensionales Array, in welches die Zeilennummer als Text und mit einen Trennzeichen anhängst.
For Zeile = 2 to Anzahl
Nummer = Cells(Zeile, 2)
Stand(Nummer) = Stand(Nummer) & " " & Zeile
Next
dh am Schluss dieser Schleife ist
Stand(1) = " 2 4 5 20"
Stand(2) = " 3 6 11 12 13 14"
Stand(3) = " 7 8 15"
usw
Schritt 2:
jetzt wird per Schleife jeder Text von Stand mit SPLIT am Leerzeichen in ein Array gesplittet (das erste Leerzeichen ignorierst du:
for i = 1 to 16
Stand(i) = Split(Mid(Stand(i), 2), " ")
Next
Schritt 3:
falls benötigt, wandelst du die texte in zahlen:
for i = 1 to 16
for j = 0 to Ubound(Stand(i))
Stand(i)(j) = CLng(Stand(i)(j))
Next j
Next i
Damit brauchst du die Längen für die einzelnen Arrays nicht vorab erstellen, weil das Array erst erstellt wird, wenn alle Daten vorliegen und damit die Länge automatisch bestimmt werden kann.
Gruß Daniel
Anzeige
AW: [VBA] Array1, Array2,... mit variable im Namen
01.02.2017 16:16:02
Nils
Hallo Daniel,
ich weiß nicht was ich sagen soll! Super! :-) Du hast mich gerade sehr glücklich gemacht!
Das ist genial, und auch so simpel. Ich weiß auch nicht wieso ich nicht auf so etwas komme...
Danke vielmals... Jetzt kann ich weiter programmieren! :-)

326 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige