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

Einzelne Zeilen aus Tabelle in Array

Einzelne Zeilen aus Tabelle in Array
31.03.2020 14:27:01
Thorsten
Liebe Forumsmitglieder,
Ich versuche seit geschlagener Zeit, einzelne Zeilen (durch ein If-Kriterium ausgewählt) in ein Array untereinander einzulesen, sodass ich sie als eigene Tabelle wieder ausgeben kann.
Die Ausgangstabelle hat etwa 120.000 Zeilen und 10 Spalten. In der zweiten Spalte steht eine Nummer, die jede Zeile einer Gruppe zuordnet(Wobei die Gruppen völlig unterschiedliche Anzahlen an Zeilen haben). Ich will auf einem anderen Datenblatt sagen können: Nehme Gruppe 5 und dort sollen dann alle Zeilen aus der Ausgangstabelle aus Gruppe 5 untereinander stehen.
Meine Idee war in etwa:
For actRow 2 to 120.000
If Cells(actRow,2) = Cells(Die Zelle, die die Auswahl 5 beinhaltet)
"An dieser Stelle müsste ein Code stehen, der den Array an der ersten freien Stelle mit allen 10 Spalten dieser Zeile befüllt"
End if
Next actRow
Ich kann also die Länge des Arrays nicht vordefinieren, da sie sich je nach Auswahl der Gruppe unterscheidet.
Ich bin kein sonderlich versierter VBA-Spezialist und bringe mir das gerade selbst bei, also geht schonend mit mir um. Gesucht habe ich auch, aber vielleicht weiß ich nicht, wonach ich suchen muss.
Vielen Dank für die Hilfe und liebe Grüße
Thorsten

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einzelne Zeilen aus Tabelle in Array
31.03.2020 14:57:40
Werner
Hallo,
warum nicht die Spalte nach der entsprechenden Gruppe filtern und das Filterergebnis kopieren?
Gruß Werner
AW: Einzelne Zeilen aus Tabelle in Array
31.03.2020 15:07:44
Thorsten
Hallo,
Weil das File um die 1900 Gruppen beinhaltet und ich dann für jede einzelne Gruppe ein Datenblatt bräuchte. Es baut auch noch ein Folgecode darauf auf, der dann innerhalb der Gruppe arbeitet. Den müsste ich dann auch für jedes Arbeitsblatt extra laufen lassen. Deshalb brauche ich die Möglichkeit für die finalen User, gezielt einzelne Gruppen auszuwählen.
Liebe Grüße
Thorsten
AW: Einzelne Zeilen aus Tabelle in Array
31.03.2020 15:09:46
Werner
Hallo,
dann lad mal eine Beispielmappe mit ein paar Beispieldaten hier hoch. Darin dann bitte auch dein "Wunschergebnis" aufzeigen.
Gruß Werner
Anzeige
AW: Einzelne Zeilen aus Tabelle in Array
31.03.2020 15:42:56
Thorsten
Hallo,
Anbei wie gewünscht ein Beispielfile:
https://www.herber.de/bbs/user/136297.xlsx
Hierbei aber die Merkmale hinten bitte ignorieren. Die sind in der Realität nicht identisch.
Die Ausgangstabelle ist hier stark verkürzt. Das ist die Tabelle mit 120.000 Zeilen.
In der Zieltabelle soll oben rechts dann die Möglichkeit bestehen, die gewünschte Gruppe auszuwählen. (Da packe ich eventuell ein Dropdown Menü hin). Hier hat der User also auch die Möglichkeit, die Gruppe 1720 zu wählen, wenn er sie braucht.
Ich hoffe, das hat das bisschen verdeutlicht. (Originaldaten kann ich da leider nicht hochladen)
Liebe Grüße
Thorsten
Anzeige
AW: Einzelne Zeilen aus Tabelle in Array
31.03.2020 16:18:42
Thorsten
Anbei mein nicht funktionierender Versuch:
Private Sub CommandButton1_Click()
Dim Gruppe As String
Dim actRow As Long
Dim actRow2 As Long
Dim arr() As Variant
Dim iCounter As Long
Dim arrCounter As Long
iCounter = 0
arrCounter = 0
Gruppe = Cells(1, 5)
iZeile = Worksheets("Alle Artikel").Cells(Rows.Count, 1).End(xlUp).Row
For actRow = 2 To iZeile
If Worksheets("Alle Artikel").Cells(actRow, 2) = Gruppe Then
iCounter = iCounter + 1
End If
Next actRow
ReDim arr(iCounter - 1, 0)
For actRow2 = 2 To iZeile
If Worksheets("Alle Artikel").Cells(actRow, 2) = Gruppe Then
arr(arrCounter, 0) = Worksheets("Alle Artikel").Cells(actRow2, 1)
arr(arrCounter, 1) = Worksheets("Alle Artikel").Cells(actRow2, 2)
arr(arrCounter, 2) = Worksheets("Alle Artikel").Cells(actRow2, 3)
arr(arrCounter, 3) = Worksheets("Alle Artikel").Cells(actRow2, 4)
arr(arrCounter, 4) = Worksheets("Alle Artikel").Cells(actRow2, 5)
arr(arrCounter, 5) = Worksheets("Alle Artikel").Cells(actRow2, 6)
arr(arrCounter, 6) = Worksheets("Alle Artikel").Cells(actRow2, 7)
arr(arrCounter, 7) = Worksheets("Alle Artikel").Cells(actRow2, 8)
arr(arrCounter, 8) = Worksheets("Alle Artikel").Cells(actRow2, 9)
arr(arrCounter, 9) = Worksheets("Alle Artikel").Cells(actRow2, 10)
arrCounter = arrCounter + 1
End If
Next actRow2
End Sub

Anzeige
AW: Einzelne Zeilen aus Tabelle in Array
31.03.2020 17:23:02
Thorsten
Wow Wahnsinn! vielen Dank!!!
Das ist ja sogar noch besser!
Vielen vielen Dank! Ich mach mich gleich dran, das an das tatsächliche File anzupassen. Super Hilfe!
Gerne u. Danke für die Rückmeldung. o.w.T.
31.03.2020 17:59:02
Werner
AW: Einzelne Zeilen aus Tabelle in Array
02.04.2020 15:17:13
Thorsten
Hallo Werner,
Ich habe jetzt den Code mal für mein File verwendet. Das Problem ist, dass Excel beim zweiten Benutzen des Buttons ewig braucht(teilweise 2 Minuten), um das Auswahlfenster anzuzeigen. Seltsamerweise ist das jedoch nicht bei der Ersten Auswahl der Fall, sondern erst bei allen Versuchen danach. Woran könnte das liegen?
Viele Grüße
Thorsten
Anzeige
AW: Einzelne Zeilen aus Tabelle in Array
03.04.2020 11:31:04
Thorsten
Hallo Werner,
wie bei deinen Codes nicht anders zu erwarten funktioniert diese Lösung viel schneller! Vielen Dank zunächst dafür.
Jetzt kommt das (hoffentlich letzte) aber: In dem neuen Code wird der Excel Zwischenspeicher leider gelöscht. Da die Gruppen in der Realität aus 10stelligen Nummern bestehen, ist ein manuelles Eintippen in die ComboBox1 leider nicht sehr praktikabel. So langsam habe ich den Eindruck, dass das Erstellen eines Dropdown Menüs das Ganze unnötig verkompliziert, da bei 1900 Gruppen das Dropdown Menü eh kaum benutzbar ist. Ich habe jetzt beide Codes nebeneinander gestellt und versucht, herauszufinden wo im Zweiten Code der Zwischenspeicher beim Aufrufen der UserForm gelöscht wird... Ohne Erfolg.
Würde sich der Code stark vereinfachen, wenn einfach ein Textfeld anstatt der ComboBox in der Userform steht? Und welcher Codebestandteil sorgt für das Löschen des Excel Zwischenspeichers? Anbei noch einmal dein Code (Unten leicht von mir abgeändert, weil ich dachte die auskommentierten Zeilen löschen den Speicher/ Machen sie aber nicht):
Option Explicit
Private Sub ComboBox1_Change()
End Sub
Private Sub CommandButton1_Click()
Dim varFilter As Variant, loLetzteQuelle As Long
Dim loLetzteZiel As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual   'Unterschied
With Worksheets("Ausgangstabelle")
varFilter = Me.ComboBox1
If WorksheetFunction.CountIf(.Columns("B"), varFilter) = 0 Then
MsgBox "Fehler: Diese Gruppe gibt es nicht."
Me.ComboBox1.ListIndex = -1
Me.ComboBox1.SetFocus
Exit Sub
End If
If Me.ComboBox1.ListIndex > -1 Then
With Worksheets("Zieltabelle")
loLetzteZiel = .Cells(.Rows.Count, "B").End(xlUp).Row
If loLetzteZiel > 2 Then
.Range(.Cells(3, "A"), .Cells(loLetzteZiel, "J")).ClearContents
End If
End With
loLetzteQuelle = .Cells(.Rows.Count, "B").End(xlUp).Row
.Range(.Cells(1, "A"), .Cells(loLetzteQuelle, "J")).AutoFilter field:=2, Criteria1:= _
varFilter
With .AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).Copy
Worksheets("Zieltabelle").Range("A3").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End With
.AutoFilter.ShowAllData
Else
MsgBox "Fehler: Bitte eine Gruppe auswählen."
Me.ComboBox1.SetFocus
Exit Sub
End If
End With
Range("A2").Select
Unload Me
Application.Calculation = xlCalculationAutomatic  'Unterschied
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim actRow As Long
Dim iZeile As Long
iZeile = Worksheets("Ausgangstabelle").Cells(Rows.Count, 2).End(xlUp).Row
Worksheets("Hilfstabelle").Columns(2).ClearContents
For actRow = 1 To iZeile
Worksheets("Hilfstabelle").Cells(actRow, 2) = Worksheets("Ausgangstabelle").Cells(actRow, 2) _
Next actRow
'Worksheets("Ausgangstabelle").Columns(2).Copy Worksheets("Hilfstabelle").Columns(2)
'Columns("B:B").Select
With Worksheets("Hilfstabelle")
.Range("$B$1:$B$" & .Cells(.Rows.Count, "B").End(xlUp).Row).RemoveDuplicates _
Columns:=1, Header:=xlYes
Me.ComboBox1.List = .Range("$B2:B" & .Cells(.Rows.Count, "B").End(xlUp).Row).Value
End With
End Sub

Anzeige
AW: Einzelne Zeilen aus Tabelle in Array
04.04.2020 11:45:52
Werner
Hallo,
da bei 1900 Gruppen das Dropdown Menü eh kaum benutzbar ist
wenn du 1900 verschiedene Gruppen hast, gebe ich dir recht
10stelligen Nummern bestehen, ist ein manuelles Eintippen in die ComboBox1 leider nicht sehr praktikabel
das würde sich bei einer Textbox aber auch nicht ändern, irgendwo mußt du die Nummer eintippen
wo im Zweiten Code der Zwischenspeicher beim Aufrufen der UserForm gelöscht wird... Ohne Erfolg.
was du damit jetzt willst/meinst verstehe ich nicht
was soll das jetzt plötzlich?
For actRow = 1 To iZeile
Worksheets("Hilfstabelle").Cells(actRow, 2) = Worksheets("Ausgangstabelle").Cells(actRow, 2) _
Next actRow

warum jetzt plötzlich eine Schleife über 120.000 Zeilen, um die Daten in die Hilfstabelle zu kopieren?
Gruß Werner
Anzeige
AW: Einzelne Zeilen aus Tabelle in Array
06.04.2020 08:22:04
Thorsten
Hallo Werner,
Die Schleife hatte ich eingebaut, weil ich die Vermutung hatte, dass dein vorheriger Code den Excel Zwischenspeicher löscht. Beim ersten von dir gemachten Code war das nicht so.
Was ich damit meine: Die Gruppe wird in einem anderen Excel File ausgesucht, und dann optimalerweise per Copy-Paste in die ComboBox/ das Textfeld eingefügt. Beim Aufruf des Eingabefensters in deinem Code wird allerdings der Excel-Zwischenspeicher gelöscht. Es geht also nur noch händisches Eintippen von 10 Ziffern. Diese Überschreibung des Zwischenspeichers kann logischerweise ja nur in der Initialisierung der ComboBox passieren, da der weitere Code erst beim Drücken auf OK gestartet wird. Deshalb mein zugegebenermaßen lächerlicher Versuch, das zu verändern.
Das Textfeld ohne jede Auswahlmöglichkeit müsste dann meinem Verständnis nach dieses Problem nicht haben, da nichts im Vorfeld an Daten kopiert wird. Nur ist dein Code für mich zu weit fortgeschritten, als dass ich ihn entsprechend abändern könnte.
Liebe Grüße
Thorsten
Anzeige
AW: Einzelne Zeilen aus Tabelle in Array
06.04.2020 08:48:09
Thorsten
Hallo Werner,
Es ist mir gelungen. Vielen vielen Dank dir für deine Hilfe. Da wäre ich alleine so niemals drauf gekommen und nebenbei habe ich einiges gelernt aus deinem Code. Wirklich großen Dank!
Beste Grüße
Thorsten
schön, u. Danke f. die Rückmeldung. owT
06.04.2020 09:14:36
Werner
AW: Einzelne Zeilen aus Tabelle in Array
02.04.2020 16:19:14
Werner
Hallo,
versuchs mal damit. Dafür mußt du in deiner Originaldatei ein zusätzliches Tabellenblatt anlegen und ihm den Namen "Hilfstabelle" geben. Dieses Blatt kansst du dann ausblenden.
Habs mit über 120000 Datensätzen getestet.
https://www.herber.de/bbs/user/136349.xlsm
Gruß Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige