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

Zeilen sortieren! Hilfe für Code Anpassung erbeten

Zeilen sortieren! Hilfe für Code Anpassung erbeten
30.05.2016 09:20:58
Nilo
Moin alle zusammen und einen sonnigen Start in die Woche!
Ich habe im Netz folgende genialen VBA Code gefunden und beiße mir die Zähne aus
den anzupassen!
Die Limitierung wünschte ich mir weg, aber wie das gehen soll frag ich mich?
Wenn ich Tabellen mit 16 Spalten und 40000 Zeilen sortieren möchte dann steigt er hier lastRow = Cells(1, 1).End(xlDown).Row einfach aus = Überlauf
Bis ca. 32250 Zeilen ist alles iO danach kommt der Überlauf.
Ich bedanke mich schon mal für den entgegengebrachten Support!
Option Explicit
‚ sorts cells in all rows of current worksheet ascending from left to right
Sub horizontalSort()
Dim i, lastRow As Integer
Const firstColumn As Integer = 1
Const lastColumn As Integer = 10
‚ find last row
lastRow = Cells(1, 1).End(xlDown).Row
‚ sort cells in each row ascending from left to right
For i = 1 To lastRow
Range(Cells(i, firstColumn), Cells(i, lastColumn)).Select
Selection.Sort Key1:=Range("A" & i), _
Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlLeftToRight, _
DataOption1:=xlSortTextAsNumbers
Next i
End Sub

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen sortieren! Hilfe für Code Anpassung erbeten
30.05.2016 09:41:30
Werner
Hallo Nilo,
schon mal als Long dimensioniert?
Dim lastRow As Long
Ich würde sowieso alle deine Variablen als Long dimensionieren.
Gruß Werner

Hintergrund
30.05.2016 09:52:25
Michael
"Integer" ist ein Datenformat bei dem ein begrenzter Platz im Speicher für eine Variable belegt wird.
Excel hat hier standardmäßig 16 Bit. Integer 16 hat also 65.535 Ziffern.
Da Excel ein negatives Vorzeichen zulässt geht der Integer Bereich von −32.768 bis 32.768.
Alles was drüber ist muss anders dimensioniert werden, z.B. Dim i as Long, wie schon gesagt wurde.

AW: Zeilen sortieren! Hilfe für Code Anpassung erbeten
30.05.2016 10:09:26
Nilo
Hi Werner,
ja so gehts ! Danke!
Hast Du vielleicht eine Idee wie ich Zahlen aus einer Zeile ohne Duplikate aufsteigend sortiere?
Meinetwegen:
Die Zahlen A bis E in F bis J Aufsteigend ohne Doppelte!
Es kommen auch doppelte Nullen und #NV mehrfach vor!
Ich durchforste gerade das Netz nach Index(Vergleich etc. aber das ist alles für Spaltenauswertungen.
Kannst Du / Ihr mir da auch weiterhelfen?
Danke schon mal
Gruß

Anzeige
Duplikate
30.05.2016 13:17:51
Michael
Das Range Objekt hat eine Funktion dafür, die heißt "RemoveDuplicates". Funktioniert ähnlich wie das Sortieren.
Beispiel:
ActiveSheet.Range("$A$1:$D$69").RemoveDuplicates Columns:=Array(1, 2, 3, 4) Header:=xlNo
Entfernt alles was in Spalte 1 bis 4 (hier A-D) gleich ist.

Ich nochmal mit Anhang! Ist doch etwas komplexer!
31.05.2016 11:37:14
Nilo
Hallo Michaeal,
ok das kannte ich nicht!
Aber ich brauche hier noche Hilfe! Ich habe mal eine Datei angehängt um es besser darzustellen.
https://www.herber.de/bbs/user/105887.zip
Wie kann ich daraus zB eine Schleife "Zeilenweise" bilden wie zB mit lngLetzte = .UsedRange.Rows.Count + .UsedRange.Row-1
ActiveSheet.Range("$A$1:$D$69").RemoveDuplicates Columns:=Array(1, 2, 3, 4) Header:=xlNo
Die Daten sollen Zeilenweise xlAscending sortiert werden.
Die nicht numerischen, also X oder . etc. solle alle immer hinten angestellt werden oder vorher in eine 0 gewandelt werden und vorher sollen die Duplikate aus den Zeilen entfernt werden.
Von links nach rechts also Absteigeng ohne Duplikate!
Das Blöde ist nur dass ich auch Zahlen mit Buchstaben habe zB: 255636954X oder 2.6437-8
Mit Suchen und Ersetzen kann ich also nichts machen!
Danke und Gruß
Nilo

Anzeige
AW: Ich nochmal mit Anhang! Ist doch etwas komplexer!
31.05.2016 14:22:40
Piet
Halo Nilo,
ich habe mir gerade die Beispieldatei herunter geladen und Frage höflich nach ob noch Interesse an einer Lösung besteht. Normalerweise gehe ich nicht in Thread wo es schon Lösungen gibt. Ich glaube hier ist aber noch einiges offen, ungeklaert.
Mich interessiert vor allem auch was mit diesen Zellen ist: 255636954X oder 2.6437-8
Als altem Praktiker faellt mir dazu evtl. eine VBA Lösung ein, müsste aber wissen was
genau gesucht werden muss, und was damit geschehen soll? - Löschen oder Replace?
Eine andere Frage: - Wozu dient das ganze? Was bezweckst du damit?
Wenn du nur die Zahlen wissen von 111 bis XXX wissen willst könnte man es anders machen.
Man konnte in einer For Next Schleife .usedRange alle Zahlen in einer Spalte auflisten.
Dann die Dubletten entfernen. Dasselbe geht auch mit Text Werten.
Wenn wir wissen wofür du das sortieren letztendlich verwenden willst, was genau du damit
auswerten oder bearbeiten willst, gibt es evtl. auch andere Lösungen wie Zeilen sortieren.
Ohne den Zusammenhang wozu es dient zu kennen können wir solche Lösungen nicht anbieten.
Wenn die Aufgabe noch ungelöst ist würde ich mich gerne daran beteiligen.
Warte aber mal deine Antwort ab
mfg Piet
PS Ist dir bekannt das die For Next Schleife die Überschrift mit sortiert?
Ist das so gewünscht? Sonst müsste For Next mit Zeile 2 beginnen!!

Anzeige
AW: Nachtrag - was machen die Formeln?
31.05.2016 14:43:33
Piet
Nachtrag,
ich habe gerade gesehen das es per VBA viele Formeln gibt,
habe aber ihre Sinn und Zweck noch nicht verstanden.
Warum die so gefundenen Werte nicht direkt per VBA auswerten?
Dzu müsste ich aber verstehen wozu das ganze dient. Dann kann
man dafür eine komplette Makrolösung entwickeln.
PS auf Select sollte man bitte verzichten. Das korrigiere ich mal als
kleiner VBA Einstieg Kurs. Makros -Ohne Select- sind viel eleganter.
mfg Piet

AW: Nachtrag - funktioniert Dubletten?
31.05.2016 17:14:59
Piet
Nachtragh
ich habe gerade gesehen das Dubletten löschen bei mir nicht funktioniert.
Mit dem Befehl hane ich bisher nie gearbeitet, weiss nicht wo der Fehler liegt.
Ich würde für Nullen und #NV das ganze Blatt mit Replace löschen.
Ich habe im Netz folgende genialen VBA Code gefunden und beiße mir die Zähne aus 
Es kommen auch doppelte Nullen und #NV mehrfach vor!

Statt dir die Zähne auszubeissen lass uns lieber zusammen arbeiten. Haben wir beide mehr von.
Statt den Umweg etwas über Formeln auszuwerten sollten wir direkt über VBA auswerten.
Dazu muss ich aber wissen was du genau suchst und auswerten willst?
Und wo das Ergebnmis stehen soll. Inclusive der unklaren Zahl mit Text?
Piet

Anzeige
Neue Sub mit performance Problemen...!
01.06.2016 15:30:34
Nilo
Hi Piet,
ersmtal Danke der Nachfrage!
Ich grenze mal ein auf: Zeilen ohne Doppelte (ohne SchnickSchnack)!!!
Dazu habe ich folgenden Code gefunden der prima funktioniert aber elend langsam ist.
Für die 40 Zeilen a 15 Spalten braucht der mehr als 5 Min.
Vielleicht kannst Du dir den mal angucken und auf Performance trimmen.
Ich selber bin kein ProfiCoder sondern ein "ich weiß wie und dass es geht, kann einiges aber nicht selber schreiben" Typ.
Per ScriptionDictionary habe ich schon ware Wunder Codes gesehen die Berechnungen von 5Min in 2Sek schaffen.
Vielleicht geht das ja auch bei dem hier. im Zweifel mach ich einen neuen Thread auf.
90% aller "anti Doppelten" Codes und Formeln sind auf Spalten getrimmt. Sehr selten was passendes wie diesen hier für "Zeilenweise" gefunden!
Sub ZeileOhneDoppelte()
Dim lZeile   As Long     ' der For/Next Index der Zeilen von 1 bis n
Dim iSpalte  As Integer  ' der For/Next Index der Spalten von 1 bis letzte belegte
Dim iLetzte  As Integer  ' letzte belegte Spalte in der Zeile
Dim iVglSpa  As Integer  ' Vergleichs-Spalte
For lZeile = 2 To 40   ' hier anpassen !!!
'If WorksheetFunction.CountBlank(Rows(lZeile))  15 Then ' Zeile leer?
iLetzte = IIf(Cells(lZeile, 15)  "", 15, Cells(lZeile, 15).End(xlToLeft).Column)
For iSpalte = 1 To iLetzte - 1
iVglSpa = iSpalte + 1
Do While iVglSpa 
Gruß

Anzeige
AW: Nachtrag - funktioniert Dubletten?
01.06.2016 21:32:05
Piet
Hallo Nilo,
ich habe das Makro gerade bei mir laufen lassen, es braucht 1 Sekunde zum löschen!
Daran kann es nicht liegen, habe noch Excel 2003. Ich vermute es gibt viele Formeln?
Das Berechnen der Formeln kann sehr lange dauern, laesst sich per Makro auf Manuell
setzen, und am Makro Ende wieder auf den alten Status zurücksetzen. s. Beispiel unten
Offen bleibt die Frage wozu die ganze Arbeit mit Formel setzen, in Werte umwandeln dient?
Man kann die Werte in den Spalten A-D doch auch direkt per Makro auswerten. Formeln machen
für mich dann keinen Sinn, wenn man danach mit der Auswertung "hahnebüchen heurmhampeln muss"
Aus deinem Beispiel konnte ich bis jetzt nicht sehen welche Daten zum Schluss wie ausgewertet werden.
Der ganze Aufwand zum Löschen, sortieren ist mir noch ein Buch mit 7 Siegeln.
mfg Piet
  'vor dem Makor Start setzen  (StatusCalc as Variant)
With Application
.ScreenUpdating = False
StatusCalc = .Calculation  'Berechnungs-Status merken
.Calculation = xlCalculationManual
End With
'***   hier dein Makro Code   ***
'Nach dem Makor zurück setzen  StatusCalc = Reset
With Application
.ScreenUpdating = True
.Calculation = StatusCalc
End With

Anzeige
AW: Nachtrag - funktioniert Dubletten?
01.06.2016 21:32:06
Piet
Hallo Nilo,
ich habe das Makro gerade bei mir laufen lassen, es braucht 1 Sekunde zum löschen!
Daran kann es nicht liegen, habe noch Excel 2003. Ich vermute es gibt viele Formeln?
Das Berechnen der Formeln kann sehr lange dauern, laesst sich per Makro auf Manuell
setzen, und am Makro Ende wieder auf den alten Status zurücksetzen. s. Beispiel unten
Offen bleibt die Frage wozu die ganze Arbeit mit Formel setzen, in Werte umwandeln dient?
Man kann die Werte in den Spalten A-D doch auch direkt per Makro auswerten. Formeln machen
für mich dann keinen Sinn, wenn man danach mit der Auswertung "hahnebüchen heurmhampeln muss"
Aus deinem Beispiel konnte ich bis jetzt nicht sehen welche Daten zum Schluss wie ausgewertet werden.
Der ganze Aufwand zum Löschen, sortieren ist mir noch ein Buch mit 7 Siegeln.
mfg Piet
  'vor dem Makor Start setzen  (StatusCalc as Variant)
With Application
.ScreenUpdating = False
StatusCalc = .Calculation  'Berechnungs-Status merken
.Calculation = xlCalculationManual
End With
'***   hier dein Makro Code   ***
'Nach dem Makor zurück setzen  StatusCalc = Reset
With Application
.ScreenUpdating = True
.Calculation = StatusCalc
End With

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige