Supportnet Computer
Planet of Tech

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

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

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

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

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

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

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

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

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

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

Antwort 11 von Saarbauer

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

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

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

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

Antwort 16 von JamieP

Moin,

noch keiner eine Idee gehabt? :)
Naja, ich schau gleich nochmal rein,

bye bye.
MfG Jamie

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: