Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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 Array Problem bei For-Next!

VBA Array Problem bei For-Next!
16.02.2024 10:14:47
Hans
Hallo,

ich habe noch so meine Probleme mit der der Syntax hier bei den Arrays. Ich möchte Werte aus dem Array in einzelne Zellen schreiben, funktioniert auch, nur er ignoriert immer den letzten Eintrag im Array. Wenn ich nachschaue und im Array sind 0-9 Strings, schreibt er mit immer nur 1-8 in die Zellen, warum hört er bei 8 auf und ignoriert den String 9?

Danke!

A = Worksheets("LOP").Range("E" & Reihe)

Ar = Split(A, Chr(10))

For Wert1 = 1 To UBound(Ar)
For Wert2 = Wert1 + 1 To UBound(Ar)

Sheets("Teilnehmer").Cells(Zeile, 3) = Ar(Wert1)

Zeile = Zeile + 1
Wert1 = Wert1 + 1

Next Wert2
Next Wert1

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Array Problem bei For-Next!
16.02.2024 10:17:50
JoWE
Du musst mit der Schleife durch das Array bei 0 beginnen.
AW: VBA Array Problem bei For-Next!
16.02.2024 10:52:07
daniel
Hi
Arrays beginnen nicht immer bei 1
es gibt auch welche, die bei 0 beginnen (beispielsweise das durch SPLIT erzeugte) und theoretisch können sie, wenn man sie manuell erstellt, auch mit jedem beliebigen anderen Wert starten.
wenn man sich nicht sicher ist, ob man ein 1- oder 0-startendes Array hat, dann kann man den Startwert auch analog dem Endwert abfragen.

For Wert1 = LBound(Ar) To UBound(Ar)


nur so nebenbei: die Innere Schleife ist hier aber sinnlos

Gruß Daniel
AW: VBA Array Problem bei For-Next!
16.02.2024 10:54:21
Yal
Hallo Hans,

ein paar Grundregeln sind zu kennen:
Array werden immer ab 0 indexiert. Die Anzahl von Elemente ist dann Ubound(Arr) + 1
Bei For-Schleifen werden die Schleifen-Variable (die überlicherweise 1-buchstabig sind, aber da macht man, was man will) nie innerhalb der Schleife manipuliert.
Also kein Wert1 = Wert1 + 1, wenn Du einen "For Wert1 = .." hast.

Ein Vergleich alle-gegen-allen ist dann
For i = 0 to Ubound(Arr) -1
For j = i +1 to Ubound(Arr)
'...
Next j
Next i

Achte auf einem sauberen Einrücken. Es ist für die Lesbarkeit vom Code viel wichtiger als bedeutungsfreie Leerzeilen.

Dein Code bereinigt könnte so aussehen (für eine bessere Übersicht wird Arr(i) und Arr(j) herausgegeben):
Sub Verteilen()

Dim Arr
Dim i, j
Dim Zeile

Arr = Split(Worksheets("LOP").Range("E" & Reihe), Chr(10))
For i = 0 To UBound(Arr) - 1
For j = i + 1 To UBound(Arr)
Zeile = Zeile + 1 'beim Start ist Zeile = 0
Sheets("Teilnehmer").Cells(Zeile, 3) = Arr(i) & "-" & Arr(j)
Next j
Next i
End Sub


VG
Yal
Anzeige
Sinnigkeit der inner Schleife
16.02.2024 10:59:50
Yal
wie Daniel es zuercht vermerkt, ist es hier nicht sichtbar, welche Mehrwert die innere Schleife haben soll. Erst wenn etwas mit beiden Element Arr(i) und Arr(j) gemacht wird, ergibt den doppelte For einen Sinn.

Ich hatte eine doppelte Ausgabe vorgeschlagen: Arr(i) & " - " & Arr(j)
Man könnte auch einen Vergleich machen:
Sub Verteilen()

Dim Arr
Dim i, j
Dim Zeile

Arr = Split(Worksheets("LOP").Range("E" & Reihe), Chr(10))
For i = 0 To UBound(Arr) - 1
For j = i + 1 To UBound(Arr)
If Arr(i) = Arr(j) Then
Zeile = Zeile + 1 'beim Start ist Zeile = 0
Sheets("Teilnehmer").Cells(Zeile, 3) = Arr(i) & "-" & Arr(j)
End If
Next j
Next i
End Sub


Aber wie ich es in der Frage verstanden habe, sind als Quelle alle Zahlen 1 bis 9, sodass es nie zu eine Gleichheit kommt.

VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige