Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1444to1448
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

Index einer bestimmten Spalte einer Listbox zählen

Index einer bestimmten Spalte einer Listbox zählen
25.08.2015 11:59:21
Chris

Hallo liebe Herber Gemeinde,
ich habe eine generelle Frage zu einer Listbox. Ich möchte eine Listbox mit 40 Spalten in einem UserForm haben und diese Spalten mit bestimmten Werten befüllen. Nun gehören bestimmte Werte in bestimmte Spalten und ich möchte, dass keine Leerzeilen darinstehen. Dh ich würde gerne wissen, ob ich die Anzahl der Zeilen in einer bestimmten Spalte ermitteln kann, um dann darunter gleich den nächsten Wert zu schreiben. Mit ListCount geht das ja nur für die gesamte Listbox und gibt den Wert der längsten Spalte wieder?!
Falls ihr andere Ideen habt wie man sowas am besten umsetzt, gerne schreiben. Die Listbox dient nur zur Darstellung, es muss nichts ausgewählt werden.
Danke und Grüße
Chris

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 12:10:37
Daniel
Hi
einfach mit ner Schleife durch die entsprechende Spalte der Listbox laufen, bis der Listboxeintrag an dieser Stelle leer ist:
dim i as long
for i = 0 to listbox1.listcount - 1
if listbox1.list(i, 30) = "" then Exit for
end if
if i = Listbox1.Listcount Then
Msgbox "Spalte 31 ist bereits vollständig gefüllt"
Else
Msgbox "erste freie Zeile in Spalte 31 hat den Zeilenindex: " & i
end if
der Ratschlag, auf Schleifen zu verzichten gilt vornehmlich für Scheifen über Excelzellen, weil die in der Verarbeitung relativ langsam sind.
Gruß Daniel

Anzeige
AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 14:04:03
Chris
Hallo Daniel,
danke für die schnelle Antwort. Also von der Logik her sollte das ja klappen, aber irgendwie looped er nicht durch meine schleife und springt vor dem Vergleich ="" wieder zum nächsten?!
For Station = 6 To ZeileStammMax
For MA = 13 To SpalteMax
If WSMaRoTa.Cells(Station, MA).Value = "1" Then
For i = 0 To ListBox6.ListCount - 1
If ListBox6.List(i, (MA - 13)) = "" Then
ListBox6.List(i, (MA - 13)) = WSMaRoTa.Cells(1, MA).Value
End If
Next i
End If
Next MA
Next Station
dh irgendwie funktioniert der Vergleich mit ="" Nicht. gibt es da evtl eine andere Variante mit is Nothing zb?!
Danke und Grüße

Anzeige
AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 14:23:11
Gerd L
Hallo Chris,
falls die relevante Codezeile durchlaufen wird, aber nicht das gewünschte Ergebnis bringt, probiere mal dies:
If Len(Trim$(ListBox6.List(i, (MA - 13)))) = 0 Then
Teste halt im Debug-Modus mit der F8-Taste.
Gruß Gerd

AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 14:51:43
Daniel
Hi
ob der Vergleich mit ="" funktioniert, hängt davon ab, was in deiner Listbox schon drin steht.
Gruß Daniel

AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 14:57:47
Chris
Hallo Ihr beiden,
also auch der Vorschlag von Gerd funktioniert es im Debug Modus nicht und es sollte ja eigentlich nichts darin stehen, oder?! bzw. will ich ja gerade dahin loopen wo nichts drinsteht. Da er im Debugmodus bei keiner einzigen Variante über diese Bedingung hinwegkommt, glaube ich, dass ich evtl. noch was ganz anderes falsch mache?!
Grüße
Chris

Anzeige
AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 15:14:09
Chris
Hier nochmal ein Screenshot, was beim Debuggen angezeigt wird.
Userbild
Grüße
Chris

AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 15:19:30
Daniel
Hi
dann hast du keine Listbox.
bzw, wenn die Listbox zu einer Userform gehört und der Code steht nicht im Moudl der Userform, dann musst du auch immer die Userform als führendes Objekt mit angeben, dh Userform1.Listbox6
gleiches wenn die Listbox direkt auf dem Tabellenblatt liegt und der Code nicht im Modul des tabellenblatts liegt, dann musst du eben das Tabellenblatt vor der Listbox angeben, damit VBA diese Listbox auch finden kann.
am besten ist, wenn du deine Datei mal hochlädst.
Das ist hier wie beim Arzt, wenn du selber hingehst und er dich direkt anschauen kann, wird die Diagnose wahrscheinlich treffender und die Therapie hilfreicher sein, als wenn du deine Symptome nur am Telefon beschreibst.
gruß Daniel

Anzeige
AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 16:16:56
Chris
Hi Daniel,
hatte gehofft es doch über eine Ferndiagnose zu lösen aber da es doch irgend ein Detailfehler ist, lade ich hier einfach mal eine Dummydatei hoch.
Danke schon mal für die Untersuchung :)
https://www.herber.de/bbs/user/99825.xlsm
Grüße
Chris

AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 16:22:50
Daniel
Hi
also wenn ich die Userform starte, läuft der Code fehlerfrei durch.
die Listbox bleibt leer, weil du sie nie befüllst.
daher ist dann auch Listbox6.ListCount = 0 und somit die entsprechende Schleife nie durchlaufen, weil er Schleifenendwert schon zum Schleifenbeginn erreicht ist.
Gruß Daniel

Anzeige
AW: Index einer bestimmten Spalte einer Listbox
25.08.2015 17:36:25
Chris
Hi Daniel,
dh heisst aber dann, das mein Problem generell nicht mit der Schleife gelöst werden kann??
Wie würdest du das Problem lösen, nun da du meine Datei kennst?
Grüße
Chris

AW: Index einer bestimmten Spalte einer Listbox
26.08.2015 08:52:05
Daniel
Hi
die Schleifenlösung ist dann geeignet wenn du einzelne Werte in eine schon bestehende Listbox einfügen willst, dass du sowas machen willst, davon bin ich aufgrund deiner Problembeschreibung ausgegangen.
Die Listbox muss dann aber schon vorbefüllt sein, dh bspw mit den Daten aus einem Zellbereich:
Listbox6.List = Sheets(...).Range(...).Value
Gruß Daniel

ohne Schleife
25.08.2015 15:23:30
Rudi Maintaire
Hallo,
ganz einfach so:
Private Sub CommandButton1_Click()
Dim DieSpalte As Integer
DieSpalte = 5 '5.Spalte
'Anzahl Einträge:
MsgBox Application.CountA(Application.Index(ListBox1.List, 0, DieSpalte))
End Sub
Gruß
Rudi

Anzeige
AW: ohne Schleife
25.08.2015 17:38:50
Chris
Hi Rudi,
dein Vorschlag sieht schon eher nach der Lösung für mein Problem aus. Aber wenn ich das bei mir einsetze bekomme ich einen Laufzeitfehler typ 13. Muss ich da vorher irgendwas im Editor aktiveren dass er deine Funktion ausführen kann??
Danke
Chris

AW: ohne Schleife
25.08.2015 18:32:50
Rudi Maintaire
Hallo,
nein, es muss nichts aktiviert werden.
Gruß
Rudi

Listbox füllen
26.08.2015 14:00:29
Rudi Maintaire
Hallo,
in deine Initialize
Dim i As Long, j As Long
Dim a(), b(), sTmp, m
Set WSMaRoTa = ThisWorkbook.Worksheets("QuMaRotationTag")
ZeileStammMax = WSMaRoTa.Cells(Rows.Count, 1).End(xlUp).row
SpalteMax = WSMaRoTa.Cells(1, Columns.Count).End(xlToLeft).Column
ReDim a(SpalteMax - 13)
For j = 13 To SpalteMax
sTmp = ""
For i = 6 To ZeileStammMax
If Cells(i, j) = 1 Then sTmp = sTmp & "|" & Cells(i, j)
Next
a(j - 13) = Split(Mid(sTmp, 2), "|")
m = WorksheetFunction.Max(m, UBound(a(j - 13)))
Next j
ReDim b(m, SpalteMax - 13)
For j = 0 To 34
For i = 0 To UBound(a(j))
b(i, j) = a(j)(i)
Next
Next
With ListBox6
.ColumnCount = SpalteMax - 12
.List = b
End With
End Sub
Gruß
Rudi

Anzeige
AW: Listbox füllen
26.08.2015 14:31:09
Chris
Servus Rudi,
danke, dass du dich nochmal einer Problematik angenommen hast. Der Code den du gepostet hast tut fast dass was ich mir vorgestellt habe, aber eigentlich schon zu viel :). Wahrscheinlich hast du es mit der Dummydatei ausprobiert.
Diese Datei stellt ein Qualimatrix von Mitarbeitern zu bestimmten Stationen dar. Dabei stehen die Stationen in den Zeilen und die Mitarbeiter in den Spalten. Da wo eine 1 steht, ist der MA qualifiziert. In der Listbox soll jede Spalte eine Station darstellen und dort diejenigen Mitarbeiter aus der jeweiligen Zelle Cells(1, j) gelistet werden, die dafür qualifiziert sind, also in dessen Spalte in der jeweiligen Zeile eine 1 steht (if cells(i,j) =1 then Add Cells(1,j) ).
Leider bin ich in VBA noch nicht so versiert wie du und hab es mit dem umschreiben nicht hinbekommen. Wäre super wenn du das nochmal anpassen könntest sofern es nicht aufwendig ist.
Besten Dank für deine Zeit
Chris

Anzeige
AW: Listbox füllen
26.08.2015 15:42:39
Rudi Maintaire
Hallo,
so?
Dim a(), b(), sTmp, m
Dim j As Long
Set WSMaRoTa = ThisWorkbook.Worksheets("QuMaRotationTag")
ZeileStammMax = WSMaRoTa.Cells(Rows.Count, 1).End(xlUp).row
SpalteMax = WSMaRoTa.Cells(1, Columns.Count).End(xlToLeft).Column
ReDim a(ZeileStammMax - 6)
For i = 6 To ZeileStammMax
sTmp = ""
For j = 13 To SpalteMax
If Cells(i, j) = 1 Then sTmp = sTmp & "|" & Cells(1, j)
Next j
a(i - 6) = Split(Mid(sTmp, 2), "|")
m = WorksheetFunction.Max(m, UBound(a(i - 6)))
Next i
ReDim b(m + 1, ZeileStammMax - 6)
For i = 6 To ZeileStammMax
b(0, i - 6) = Cells(i, 3)
Next
For j = 0 To 34
For i = 0 To UBound(a(j))
b(i + 1, j) = a(j)(i)
Next
Next
With ListBox6
.ColumnCount = UBound(b, 2) + 1
.List = b
End With
End Sub
Gruß
Rudi

Anzeige
AW: Listbox füllen
26.08.2015 16:44:53
Chris
Hi Rudi,
genial genau das ist es. Sogar mit dem Stationsnamen auch noch im Kopf der Spalte. Wusste gar nicht, dass so etwas geht :D
Besten Dank dir Rudi!
Chris

326 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige