Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1096to1100
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
Array mit mehrspaltiger Listbox füllen
Martin
Hallo liebe Excelianer,
eine Listbox kann sehr einfach mit einem Array gefüllt werden: ListBox1.List() = Arr
Leider geht das nicht umgekehrt: Arr = ListBox1.List()
Folgende Lösung habe ich mir geschrieben:
Sub Lösung
For i = 1 To ListBox1.ListCount
For j = 1 To 9
Arr(i, j) = ListBox1.List(i - 1, j - 1)
Next j
Next i
End Sub
Das klappt zwar wunderbar, aber trotzdem würde es mich interessieren, ob es auch eine einfache Lösung wie "Arr = ListBox1.List()" gibt. Ich würde mich über Antworten sehr freuen.
Viele Grüße
Martin
AW: Array mit mehrspaltiger Listbox füllen
21.08.2009 20:33:45
Gerd
Hallo Martin!
Private Sub test()
Dim vnt()
Dim vnt2()
Dim i
Dim j
vnt = Range("a1:c4").Value
ListBox1.ColumnCount = 3
ListBox1.List = vnt
vnt2 = ListBox1.List
For i = 0 To UBound(vnt2, 1)
For j = 0 To UBound(vnt2, 2)
MsgBox vnt2(i, j)
Next
Next
End Sub
Gruß Gerd
Deklariere die Array-Variable dimensionslos
21.08.2009 20:33:53
NoNet
Hallo Martin,
so sollte es funktionieren :
Private Sub CommandButton1_Click()
Dim arr()
arr = ListBox1.List
MsgBox arr(7, 1)
End Sub

Gruß, NoNet
VIELEN DANK! So klappt es! - Aber noch eine Frage
21.08.2009 21:04:43
Martin
Hallo NoNet,
ich frage mich, warum ich darauf nicht selbst gekommen bin. Trotzdem frage ich gleich weiter:
Bislang habe ich mein Array so angelegt, dass es bei (1, 1) begann:
Dim Arr()
ReDim Arr(1 To ListBox1.ListCount, 1 To 9)
Allerdings beginnt das Array bei Deiner Lösung mit (0, 0). Da ich das Array mit "prcSort" noch sortieren möchte, wäre mir (1, 1) als Startpunkt lieber. Besteht die Möglichkeit das Array bei (1, 1) beginnen zu lassen? Wenn es nicht geht, ist es auch nicht schlimm (schließlich habe ich ja eine Lösung).
Viele Grüße
Martin
Anzeige
AW: VIELEN DANK! So klappt es! - Aber noch eine Frage
21.08.2009 21:27:55
Gerd
Hallo Martin,
schicke das Datenfeld in einen Range u. hole es aus diesem wieder zurück.
Gruß Gerd
AW: VIELEN DANK! So klappt es! - Aber noch eine Frage
21.08.2009 21:42:21
Martin
Hallo Gerd,
vielen Dank für deine Antwort, dein Vorschlag funktioniert. Woran liegt es, dass eine einer Range-Zuweisung das Array bei (1, 1) beginnt, bei einer Listbox-Zuweisung jedoch bei (0, 0). Gibt es dafür einen bestimmten Grund?
Viele Grüße
Martin
AW: Indices mal 0- mal 1-basierend
21.08.2009 21:53:41
Gerd
Hallo Martin,
dies wäre eine Frage an die Programmierer von MS.
Gruß Gerd
AW: Indices mal 0- mal 1-basierend
22.08.2009 11:12:34
Nepumuk
Hallo,
weil es keine Zeile / Spalte 0 gibt.
Gruß
Nepumuk
AW: Indices mal 0- mal 1-basierend
22.08.2009 12:31:58
Gerd
Hallo Nepumuk,
... in Tabellen, o.K.
bei einer Listbox-Zuweisung jedoch bei (0, 0)
Dies hätte MS wohl genauso gut analog festlegen können.
Gruß Gerd
Anzeige
AW: Indices mal 0- mal 1-basierend
22.08.2009 12:53:40
Martin
Hallo Gerd, hallo Nepumuk,
auch ich finde es schade, dass die Array-Zuweisung auf (1, 1) bei Range und (0, 0) bei einer Listbox erfolgt. Ich hätte mir wenigstens eine zusätzliche Möglichkeit gewünscht, dass ich manuell Einfluss auf die Zuweisungsart habe (zum Beispiel durch Festlegung des Array-Bereiches). Das wäre zum Beispiele eine schöne Variante gewesen:
Sub Beispiel()
With ListBox1
Dim Arr()
'Festlegung der Zuweisungsart durch Vorgabe des Array-Bereiches
ReDim Arr(1 To .ListCount, 1 To .ColumnCount + 1)
arr = .List
End With
End Sub
Viele Grüße
Martin
Anzeige
AW: Indices mal 0- mal 1-basierend
22.08.2009 13:07:51
Nepumuk
Hallo Gerd,
ne Listbox fängt aber nun mal mit Listindex 0 und Column 0 an. Das ist in sich schon logisch.
Gruß
Nepumuk
Einfach akzeptieren, das ist nicht das Einzige,...
22.08.2009 14:00:14
Luc:-?
...was in xl/VBA diesen Index-Start-Unterschied aufweist, Leute!
In der Mathematik ist auch 0 üblich, anderswo oft auch, mitunter allerdings mit dem Touch einer Obergröße wie bei Gliederungen (bzw der Option fehlender Untergliederungen)...
Da hat jeder Zweck seine eigene Logik und damit jede Form ihre Berechtigung... ;-)
Gruß+schöWE,
Luc :-?
AW: Einfach akzeptieren, das ist nicht das Einzige,...
22.08.2009 15:13:02
Gerd
Hallo Martin,
da bleibt als Alternative nur eine Schleifen-Lösung übrig.
@Luc:
Kenntnis u. Akzeptanz, was sonst ? :-)
Gruß Gerd
Anzeige
Vielen Dank an alle!
22.08.2009 15:44:14
Martin
Hallo Gerd, Nepumuk & Co.,
vielen Dank für Eure Antworten. Meine Frage hatte ich ja eigentlich nur aus Interesse gestellt, obwohl mir eine alternative Lösung bereits vorlag. Für alle, die die Daten einer mehrspaltigen Listbox in ein mehrspaltiges Array mit Beginn bei (1, 1) übertragen wollen, hier noch einmal die Lösung:
Sub Beispiel()
With ListBox1
Dim Arr()
ReDim Arr(1 To .ListCount, 1 To .ColumnCount + 1)
For j = 1 To .ColumnCount + 1
Arr(i, j) = .List(i - 1, j - 1)
Next j
End With
End Sub
Wenn das Array bei (0, 0) beginnen darf, geht es einfacher:
Sub Beispiel2()
Dim Arr()
Arr = ListBox1.List
End Sub
Viele Grüße
Martin
Anzeige
Dein erster Code...
22.08.2009 16:05:50
Tino
Hallo,
müsste meiner Meinung nach so aussehen.
Die ...Count Eigenschaft der Listbox fängt bei 1 an.
Dim Arr()
Dim j As Long, i As Long
With ListBox1
ReDim Arr(1 To .ListCount, 1 To .ColumnCount)
For i = 1 To .ListCount
For j = 1 To .ColumnCount
Arr(i, j) = .List(i - 1, j - 1)
Next i
Next j
End With

Gruß Tino
Danke für den Hinweis, noch eine kleine Änderung
22.08.2009 16:37:47
Martin
Hallo Tino,
vielen Dank für den Hinweis. Der Fehler ist mir unterlaufen, weil ich eigentlich mit UBound arbeiten wollte, das aber vergessen hatte.
Da die ColumnCount-Eigenschaft lediglich die Anzahl der anzuzeigenden Spalten angibt, kann ColumnCount von der tatsächlichen Spaltenanzahl der Listbox abweichen. In der Excel-Hilfe zur ColumnCount-Eigenschaft steht: "Gibt die Anzahl der Spalten an, die in einem Listenfeld oder in einem Kombinationsfeld angezeigt werden sollen." Daher wäre es aus meiner Sicht sinnvoller die tatsächliche Spaltenanzahl mit "UBound(.List, 2) + 1" zu ermitteln:
Sub Beispiel()
Dim Arr()
Dim j As Long, i As Long
With ListBox1
ReDim Arr(1 To .ListCount, 1 To UBound(.List, 2) + 1)
For i = 1 To .ListCount
For j = 1 To UBound(.List, 2) + 1
Arr(i, j) = .List(i - 1, j - 1)
Next i
Next j
End With
End Sub
Viele Grüße
Martin
Anzeige
gleicher Fehler
22.08.2009 23:03:11
Tino
Hallo,
beim blind schreiben ist dir der gleiche Fehler wie mir unterlaufen.
In der Schleife i und j vertauscht.
Gruß Tino
AW: gleicher Fehler
24.08.2009 15:28:17
Martin
Hallo Tino,
richtig, aber jetzt haben wir es aber endgültig geschafft!
Nun noch einmal offiziell für alle die richtige Lösung:
Sub Beispiel()
Dim Arr()
Dim j As Long, i As Long
With ListBox1
ReDim Arr(1 To .ListCount, 1 To UBound(.List, 2) + 1)
For i = 1 To .ListCount
For j = 1 To UBound(.List, 2) + 1
Arr(i, j) = .List(i - 1, j - 1)
Next j
Next i
End With
End Sub

Viele Grüße
Martin

112 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige