vba - viele matrixformeln ersetzen?
#1
Hallo in die Runde,

ich möchte eine Auflistung von ca 6000 Zeilen sortieren.

Diese Liste besteht aus ca 300 verschiedenen "Teilen" (nenn ich das jetzt mal...) welches jeweils in der selben Zeile eine Textspalte und eine Zahlspalte besitzt.

Diese 300 Teile werden in der Auflistung mehrfach mit verschiedenen Texten und Zahlen benannt.

Ich möchte diese ca 300 Teile die dort gelistet sind ausfindig machen und nebeneinander schreiben.
Unter jedem Teil sollen dann diese verschiedenen zugehörigen Texte aufgelistet werden.

Ich mache das derzeit über Formellösungen. Da wir aber über 300Spalten und 6000 Zeilen reden bewegt sich der PC nun kaum noch.
Versuche das mit "EnableCalculation=False" einzudämmen sind vergebene Müh, da auch die einmalige Berechnung so lange dauert, da ist ja Vivaldis Concerto Grosso eher zu Ende.

Alsdann hab ich versucht das ganze per VBA zu machen.
Da ich keine Ahnung hab verwende ich den Recorder, geben im Tabellenblatt die Formel und korrigiere soweit ich in der Lage bin den Code danach.
Wobei ich dann auch daran scheitere eine VBA-Matrixformel zu basteln.

Ich bin nun an dem Punkt wo ich Hilfe oder zumindest eine gute Meinung bräuchte ob man das so machen sollte / könnte / oder doch bei der Formelvariante bleiben sollte...
Auch scheint mir das mit den 300 mal diesen Ablauf per Recorder basteln irgendwie uneffectiv. 
Gibt es hier vielleicht eine einfachere Lösung?

Da ich weiß, dass ich so super erklären kann, hab ich mal eine Beispieldatei gestrickt. 
Vielleicht wird man da eher draus schlau?!

Könnte mir da jemand mal über die Schulter schauen?
Liebe Grüße
Klaus


Angehängte Dateien
.xlsm   Beispiel Spalten untereinander.xlsm (Größe: 54,3 KB / Downloads: 13)
Top
#2
Hallo,

was ist Ausgangssituation?
Was ist Ziel?
Wie oft muß das laufen?
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#3
Hallo,

kannst Du eine Beispielmappe einstellen, die sich am Original orientiert.
Mit Texten an exakt den gleichen Zellen.

Du schreibst von 300 Spalten und 6000 Zeilen.
Wie sieht das im Original aus?
Gruß Atilla
Top
#4
Hallo,

auch ich konnte da kein System erkennen.

Die Datenstruktur sollte so geändert werden, dass eine Bearbeitung entweder mit Pivot oderAutofilter möglich ist.

mfg
Top
#5
Hossa... das ging ja schnell Smile

die Beispielmappe hängt oben unter dem Post dran.
Ich hab mich aber nur auf 350 Zeilen beschränkt.

Soll ich die besser erweitern um genau die genannten Anzahlen damit das verständlicher ist?


Autofilter ist nicht machbar, da diese Tabelle Menchen benutzen werden die kaum Ahnung von PC geschweige denn von Excel haben.
Die wissen weder wo noch wie sowas an oder aus gemacht wird.

Liebe Grüße
Klaus
Top
#6
Hallo,

Zitat:Die wissen weder wo noch wie sowas an oder aus gemacht wird.

dann brings ihnen bei!

Hier mal eine Liste ohne Lücken, ohne doppelte Texte und ohne Matrixformeln!



.xlsb   Beispiel Spalten untereinander.xlsb (Größe: 67,17 KB / Downloads: 7)
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#7
Hallo Opa Edgar,

danke für den Tip.


Bei der Lösung könnte man vielleicht den Autofilter auf jedes einzelne Teil ansetzen, dieses Ergebnis kopieren und woanders als Werte wieder einfügen... Vielleicht als Ablauf...
Muss ich mir mal durch den Kopf gehen lassen ob das die Lösung wäre...

Könnte man irgendwie die Auswahl beim Autofilter automatisieren? So das er nach und nach alle Funde ankreuzt, auswertet, den gerade ausgewerteten abwählt, den nächsten Fund ankreuzt, auswertet usw...?
Wenn ich das von Hand im Recorder mache, dann findet er ja auch beim nächsten Mal nur immer die, ich schon angekreuzt hatte...

Huh
Top
#8
also wenn man das wirklich mit autofilter machen wollte... dann könnte man das wahrscheinlich mit folgendem Code mit einem Beitrag aus 2012 lösen...

nur hab ich keinen blassen Schimmer was ich anpassen müsste damit das bei meinem Beispiel funktionieren würde :(

wenn ich das so eingeben funktioniert das natürlich nicht auf Anhieb.  

Code:
'Das Array ist die Lösung

Dim i As Long, u As Long, z As Integer, r As Integer
Dim ws As Worksheet
Dim FeldArray()
Set ws = Worksheets(1)
ReDim Preserve FeldArray(ws.Autofilter.Range.Rows.Count, ws.Autofilter.Range.Columns.Count)
r = 1
 'Variable i beinhaltet die Anzahl der Reihen des Autofilterbereiches
 For i = 1 To ws.Autofilter.Range.Rows.Count
    'Der erste Spaltenwert eines Filters wird ohne Prüfung in den Array eingetragen,
    'da dieser noch nicht Doppelt sein kann
    If i = 1 Then
     FeldArray(i, u) = ws.Autofilter.Range.Cells(i, u)
       Else
         For z = 1 To i - 1
           'Prüfung Zelle Autofilter mit den Werten im Array
           If ws.Autofilter.Range.Cells(i, u) = FeldArray(z, u) Then
              GoTo Weiter
           End If
         Next z
      r = r + 1
      'Array wird erweitert
      FeldArray(r, u) = ws.Autofilter.Range.Cells(i, u)
Weiter:
    End If
 Next i


'Nun sind alle Werte im Array und ich kann z.B. mit


Selection.Autofilter Field:=1, Criteria1:=FeldArray(u, 1)


'den Autofilter anweisen oder das ganze, so wie bei mir, mit einer for...next Schleife automatisieren.
Top
#9
Hallo,

man kann Dir sicher eine VBA Lösung anbieten, die ratz fatz alles umsetzt, aber ohne den genauen Tabellenaufbau geht nicht. ORIGINAl-Besipieldaten.
Gruß Atilla
Top
#10
Hallo,

ein paar einfache Formeln:


.xlsb   Spalten untereinander.xlsb (Größe: 74,72 KB / Downloads: 7)

verbessert!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste