Supportnet / Forum / Tabellenkalkulation
VBA Numerisch sortieren
Frage
Hey,
ich brauch mal wieder Hilfe von nem professionellen VBAler.
Ich habe eine Tabelle, die in etwa folgendermaßen Aussieht.
KN. Kunde Produkt
4 ABC A
B
111 DEF A
1 HYI C
14 ZDV F
Nun würde ich gerne alle Kunden nach ihrer Kundennummer (links) sortieren. Das Problem dabei ist jedoch, dass manche Kunden (siehe Zeile 1 + 2) auch mehrere Zeilen umfassen. Diese dürfen bei einer automatischen Sortierung natürlich nicht auseinander gerissen werden.
Wie mache ich das am besten?
MfG Jamie
Antwort 1 von Saarbauer
Hallo,
nicht ganz verständlich, vielleicht kannst du ein besseres Beispiel hier einstellen
http://www.netupload.de/
und Link hier hinterlegen
Geht wahrscheinlich nur mit VBA
Gruß
Helmut
nicht ganz verständlich, vielleicht kannst du ein besseres Beispiel hier einstellen
http://www.netupload.de/
und Link hier hinterlegen
Geht wahrscheinlich nur mit VBA
Gruß
Helmut
Antwort 2 von JamieP
Hey,
ich habe es mal hochgeladen.
http://www.netupload.de/detail.php?img=a68db698cc511fcdfbea4a7d7d73...
Ich brauche wohl ein VBA Script, dass die einzelnen Zeilen nach ihrer Kundennummer sortiert.
Das Problem ist nur, dass manche Zeilen keine Kundennummer haben, dann gilt die Kundennummer oberhalb dieser Zeile.
MfG Jamie
ich habe es mal hochgeladen.
http://www.netupload.de/detail.php?img=a68db698cc511fcdfbea4a7d7d73...
Ich brauche wohl ein VBA Script, dass die einzelnen Zeilen nach ihrer Kundennummer sortiert.
Das Problem ist nur, dass manche Zeilen keine Kundennummer haben, dann gilt die Kundennummer oberhalb dieser Zeile.
MfG Jamie
Antwort 3 von Aliba
Hi Jamie,
also der VB-ler bin ich nicht. Kann dir somit auch nur einen "Hund" anbieten mit einer Hilfsspalte.
In meinem Beispiel ist das die Spalte H.
Ich gehe mal davon aus, daß in Zeile1 Überschriften stehen.
In H1 schreibst Du dann z.B. Sortierer
Formel in H2 und soweit Daten erwartet werden nach unten kopieren.
=WENN(C2="";"";WENN(A2="";H1+ZEILE()/1000;A2))
Das Makro zum Sortieren sieht dann so aus:
Sub Sortieren()
Range("A1").Select
Selection.Sort Key1:=Range("H1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
CU Aliba
also der VB-ler bin ich nicht. Kann dir somit auch nur einen "Hund" anbieten mit einer Hilfsspalte.
In meinem Beispiel ist das die Spalte H.
Ich gehe mal davon aus, daß in Zeile1 Überschriften stehen.
In H1 schreibst Du dann z.B. Sortierer
Formel in H2 und soweit Daten erwartet werden nach unten kopieren.
=WENN(C2="";"";WENN(A2="";H1+ZEILE()/1000;A2))
Das Makro zum Sortieren sieht dann so aus:
Sub Sortieren()
Range("A1").Select
Selection.Sort Key1:=Range("H1"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
CU Aliba
Antwort 4 von JamieP
Hmm, erstmal danke.
Habe nur das Problem, dass er mir dabei durchgehend einen "Sortierfehler" ausspuckt :(
Zudem würd ichs gerne ohne Formeln lösen, da sehr viele Leute auf die Tabelle Zugriff haben werden, und ich nicht weis, ob nicht früher oder später jemand an der Formel rumfuscht :D
Gruß, Jamie
Habe nur das Problem, dass er mir dabei durchgehend einen "Sortierfehler" ausspuckt :(
Zudem würd ichs gerne ohne Formeln lösen, da sehr viele Leute auf die Tabelle Zugriff haben werden, und ich nicht weis, ob nicht früher oder später jemand an der Formel rumfuscht :D
Gruß, Jamie
Antwort 5 von Saarbauer
Hallo,
versuchs mal mit dem Makro
Sub Sortieren()
letzteZeile = Range("C65536").End(xlUp).Row
For i = 2 To letzteZeile - 1
Kundennummer = Range("A" & i).Value
Zeile = 0
andereKN = 0
For j = i + 1 To letzteZeile
If Range("A" & j).Value = "" And andereKN = 0 Then
Zeile = Zeile + 1
Else
If Kundennummer > Range("A" & j) And Range("A" & j).Value > "" Then
Rows(i & ":" & i + Zeile).Select
Selection.Cut Destination:=Rows(letzteZeile + 1 & ":" & letzteZeile + 1 + Zeile)
Rows(i & ":" & i + Zeile).Select
Selection.Delete Shift:=xlUp
i = i - 1
j = letzteZeile
Else
andereKN = 1
End If
End If
Next j
Next i
End Sub
Gruß
Helmut
P.S. Ich gehe davon aus, dass du das Makro in deine Tabelle übertragen kannst. Sonst noch mal melden
versuchs mal mit dem Makro
Sub Sortieren()
letzteZeile = Range("C65536").End(xlUp).Row
For i = 2 To letzteZeile - 1
Kundennummer = Range("A" & i).Value
Zeile = 0
andereKN = 0
For j = i + 1 To letzteZeile
If Range("A" & j).Value = "" And andereKN = 0 Then
Zeile = Zeile + 1
Else
If Kundennummer > Range("A" & j) And Range("A" & j).Value > "" Then
Rows(i & ":" & i + Zeile).Select
Selection.Cut Destination:=Rows(letzteZeile + 1 & ":" & letzteZeile + 1 + Zeile)
Rows(i & ":" & i + Zeile).Select
Selection.Delete Shift:=xlUp
i = i - 1
j = letzteZeile
Else
andereKN = 1
End If
End If
Next j
Next i
End Sub
Gruß
Helmut
P.S. Ich gehe davon aus, dass du das Makro in deine Tabelle übertragen kannst. Sonst noch mal melden
Antwort 6 von JamieP
Hi,
Makro funktioniert super. Zumindest sortiert er nun alle Zeilen richtig. Big Thx.
Nur hmm ... ist es normal, dass er nun etwa eine Stunde braucht, um 100 Zeilen zu sortieren? :D
Kann man das noch irgendwie beschleunigen?
Trotzdem schonmal vielen Dank, zumindest läuft es schon mal.
MfG Jamie
Makro funktioniert super. Zumindest sortiert er nun alle Zeilen richtig. Big Thx.
Nur hmm ... ist es normal, dass er nun etwa eine Stunde braucht, um 100 Zeilen zu sortieren? :D
Kann man das noch irgendwie beschleunigen?
Trotzdem schonmal vielen Dank, zumindest läuft es schon mal.
MfG Jamie
Antwort 7 von Saarbauer
Hallo,
bei 100 Zeilen ist das nicht normal, aber es ist sehr schwier das Problem so zu klären.
Eine Möglichkeit zur Problemlösung wäre deine Datei und das Makro bei Netupload zu hinterlegen, aber als Datei und nicht wie in AW 2 als Bild.
Ich habe für 100 Zeilen keine 1 Minute gebraucht.
Gruß
Helmut
bei 100 Zeilen ist das nicht normal, aber es ist sehr schwier das Problem so zu klären.
Eine Möglichkeit zur Problemlösung wäre deine Datei und das Makro bei Netupload zu hinterlegen, aber als Datei und nicht wie in AW 2 als Bild.
Ich habe für 100 Zeilen keine 1 Minute gebraucht.
Gruß
Helmut
Antwort 8 von JamieP
Also die Datei kann ich nicht hinterlegen, ist ne private Datei.
Aber ich glaube, ich weis wo das Problem liegt. Die Datei ist knapp 500 Zeilen lang. Und er ließt halt andauernd erst die 500 Zeilen ein und vergleicht sie dann mit den anderen, bzw. schaut welche Zeile die kleinste KN hat. Dann dauert es auch für 100 Zeilen ziemlich lange.
Aber ich denke es müsste so gehen. Danke :)
Nur eine Frage habe ich noch. Führe ich das Makro einmal aus, füge dann ein paar weitere Zeilen hinzu und will es danach nochmal starten, macht er nix mehr.
Bzw. die Sanduhr am Mauszeiger leuchtet kurz auf und verschwindet sofort wieder. Kann es sein, dass dort irgendweldche Variablen vielleicht anfangs nicht gesetzt werden und er daher denkt, dass er fertig sei?
MfG Jamie
Aber ich glaube, ich weis wo das Problem liegt. Die Datei ist knapp 500 Zeilen lang. Und er ließt halt andauernd erst die 500 Zeilen ein und vergleicht sie dann mit den anderen, bzw. schaut welche Zeile die kleinste KN hat. Dann dauert es auch für 100 Zeilen ziemlich lange.
Aber ich denke es müsste so gehen. Danke :)
Nur eine Frage habe ich noch. Führe ich das Makro einmal aus, füge dann ein paar weitere Zeilen hinzu und will es danach nochmal starten, macht er nix mehr.
Bzw. die Sanduhr am Mauszeiger leuchtet kurz auf und verschwindet sofort wieder. Kann es sein, dass dort irgendweldche Variablen vielleicht anfangs nicht gesetzt werden und er daher denkt, dass er fertig sei?
MfG Jamie
Antwort 9 von Saarbauer
Hallo,
wie hast du das Makro in dein Programm gebracht?
Hieraus kopiert oder eingegeben?
Dein Problem mit der Sanduhr tritt bei mir nicht auf.
Gruß
Helmut
wie hast du das Makro in dein Programm gebracht?
Hieraus kopiert oder eingegeben?
Dein Problem mit der Sanduhr tritt bei mir nicht auf.
Gruß
Helmut
Antwort 10 von JamieP
Hey,
das einfach mit Copy & Paste :) Sollte daher alles richtig sein.
Das Script läuft ja auch einwandfrei, aber nach einem druchlauf muss ich immer erst Excel neustarten, damit es wieder klappt :/
MfG Jamie
das einfach mit Copy & Paste :) Sollte daher alles richtig sein.
Das Script läuft ja auch einwandfrei, aber nach einem druchlauf muss ich immer erst Excel neustarten, damit es wieder klappt :/
MfG Jamie
Antwort 11 von Saarbauer
Hallo,
als Anlage meine Testdatei
http://www.netupload.de/detail.php?img=b28ea7b4d0f14b81d358e694350a...
Gruß
Helmut
als Anlage meine Testdatei
http://www.netupload.de/detail.php?img=b28ea7b4d0f14b81d358e694350a...
Gruß
Helmut
Antwort 12 von JamieP
hehe, jo ...
Bei der kleinen Tabelle geht es ruck zuck.
Aber probier es mal mit einer riesen Kundentabelle, mit 20 Spalten Breite und mit über 500 Kunden. :D
Na ok, läuft nun alles.
Ich bedanke mich herzlichst, big thx.
MfG Jamie
Bei der kleinen Tabelle geht es ruck zuck.
Aber probier es mal mit einer riesen Kundentabelle, mit 20 Spalten Breite und mit über 500 Kunden. :D
Na ok, läuft nun alles.
Ich bedanke mich herzlichst, big thx.
MfG Jamie
Antwort 13 von Saarbauer
Hallo,
hast du mal deine Daten in die Tabelle kopiert und gesehen wie es da läuft. Manchmal hat Excel so kleine Macken, dann geht es nach einem umkopieren wieder besser. Warum?? Ich habe festgestellt, dass dann die Dateien häufig kleiner sind, also sammelt sich irgendwelcher Schrott im Hintergrund.
Gruß
Helmut
hast du mal deine Daten in die Tabelle kopiert und gesehen wie es da läuft. Manchmal hat Excel so kleine Macken, dann geht es nach einem umkopieren wieder besser. Warum?? Ich habe festgestellt, dass dann die Dateien häufig kleiner sind, also sammelt sich irgendwelcher Schrott im Hintergrund.
Gruß
Helmut
Antwort 14 von nighty
hi all :)
lege die daten in ein array und es wird merklich schneller sein,bzw arbeite dich in vb ein um dieses umzusetzen
gruss nighty
lege die daten in ein array und es wird merklich schneller sein,bzw arbeite dich in vb ein um dieses umzusetzen
gruss nighty
Antwort 15 von JamieP
Jo, danke euch allen :)
Mit den Arrays werd ich mich erst noch einarbeiten müssen.
Hab da aber noch eine Frage ... bzw. ein weiteres Problem.
Ich möchte nun die Daten aus der Tabelle oben ausdrucken.
Nun tritt natürlich das Problem auf, dass die Exceldatei viel zu umfangreich und vorallem viel zu breit ist.
Wollte daher eine Art Druckansicht basteln, in die dann per Makro die Daten eingetragen und automatisch gedruckt werden.
Wollte dies Ausgabe etwa so haben, dass drei Zeilen pro Seite ausgegeben werden, und zwar pro Zeile ein solches Kästchen.
http://www.netupload.de/detail.php?img=5299adc2cbf5b6dd7c0b75b95b3b...
Kriege etwa drei solcher Ausgabenbereiche auf eine DinA4 Seite.
Zur Umsetzung habe ich mir überlegt, dass ich das Script von Saarbauer nutzen könnte, und es etwas umschreibe. So, dass es halt jede Zeile einzeln abgeht und die Sachen einträgt. Das ist kein Problem, kriege ich auch selber hin. Aber wie erstelle ich diese Ausgabetabelle (siehe Bild) am besten?
Ich weiss ja nie genau wieviele Zeilen es letztenendes sind, und kann deswegen auch nicht schon eine Vorlage basteln.
Kann mir da jemand ein paar Tips geben?
MfG Jamie
Mit den Arrays werd ich mich erst noch einarbeiten müssen.
Hab da aber noch eine Frage ... bzw. ein weiteres Problem.
Ich möchte nun die Daten aus der Tabelle oben ausdrucken.
Nun tritt natürlich das Problem auf, dass die Exceldatei viel zu umfangreich und vorallem viel zu breit ist.
Wollte daher eine Art Druckansicht basteln, in die dann per Makro die Daten eingetragen und automatisch gedruckt werden.
Wollte dies Ausgabe etwa so haben, dass drei Zeilen pro Seite ausgegeben werden, und zwar pro Zeile ein solches Kästchen.
http://www.netupload.de/detail.php?img=5299adc2cbf5b6dd7c0b75b95b3b...
Kriege etwa drei solcher Ausgabenbereiche auf eine DinA4 Seite.
Zur Umsetzung habe ich mir überlegt, dass ich das Script von Saarbauer nutzen könnte, und es etwas umschreibe. So, dass es halt jede Zeile einzeln abgeht und die Sachen einträgt. Das ist kein Problem, kriege ich auch selber hin. Aber wie erstelle ich diese Ausgabetabelle (siehe Bild) am besten?
Ich weiss ja nie genau wieviele Zeilen es letztenendes sind, und kann deswegen auch nicht schon eine Vorlage basteln.
Kann mir da jemand ein paar Tips geben?
MfG Jamie
Antwort 16 von JamieP
Moin,
noch keiner eine Idee gehabt? :)
Naja, ich schau gleich nochmal rein,
bye bye.
MfG Jamie
noch keiner eine Idee gehabt? :)
Naja, ich schau gleich nochmal rein,
bye bye.
MfG Jamie

