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

Sortieren per Makro ohne löschen

Sortieren per Makro ohne löschen
12.12.2020 09:20:39
Roger
Guten Morgen, die Makro sortiert und funktioniert. Das Problem bei diesem Makro liegt... falls ich in Zeille A nicht alle Werte habe, dann werden beim Sortieren die Spalte B und C in jenen Zellen bei Bsp. B17, B18 C17, C18 gelöscht.
Das sollte nicht sein. Die Zelle B und C sollen die Werte beibehalten, wenn bei Spalte A nicht alle Werte da sind
https://www.herber.de/bbs/user/142276.xlsm
Sub CommandButton1_Click()
Dim arr, i, ii, temp2, temp3
arr = Range("A2:C100")
For i = 1 To Range("A2:C100").Rows.Count
For ii = i + 1 To Range("A2:C100").Rows.Count
If arr(i, 1) = arr(ii, 2) Then
temp2 = arr(ii, 2): temp3 = arr(ii, 3)
arr(ii, 2) = arr(i, 2): arr(ii, 3) = arr(i, 3)
arr(i, 2) = temp2: arr(i, 3) = temp3
End If
Next ii
Next i
Range("A2:C100") = arr
End Sub
Mfg Roger

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortieren per Makro ohne löschen
12.12.2020 12:10:16
Herbert_Grom
Hallo Roger,
in deinem Beispiel sind in der Spalte A diese Zahlen nicht vorhanden: 30 & 10. Wie willst du die einsortiert haben? Am Anfang oder am Ende?
Servus
AW: Sortieren per Makro ohne löschen
12.12.2020 12:54:31
Roger
Hallo Herbert
Die Zahlen in A sollten wenn möglich in gleicher Reihenfolge stehen bleiben. Die Spalte B bzw. C soll sich jenen der Spalte A anpassen. Und diese Zahlen welche es nicht in A hat sollen am Ende stehen. Bzw. diese Zahlen welche in B&C stehen und es nicht in Spalte A hat sollen ebenfalls am Ende stehen.
Gruess Roger
AW: Sortieren per Makro ohne löschen
12.12.2020 13:38:21
ralf_b
Moin Roger,
Sub CommandButton1_Click()
Dim arr, i, ii, temp2, temp3
Dim letzteZ As Long
Dim letzteA As Long
Dim letzteB As Long
letzteA = Range("A:A").End(xlUp).Row
letzteB = Range("B:B").End(xlUp).Row
letzteZ = IIf(letzteA > letzteB, letzteA, letzteB)
arr = Range("A2:C" & letzteZ)
For i = 1 To letzteZ
For ii = i + 1 To letzteZ
If arr(i, 1)  "" Then
If arr(i, 1) = arr(ii, 2) Then
temp2 = arr(ii, 2): temp3 = arr(ii, 3)
arr(ii, 2) = arr(i, 2): arr(ii, 3) = arr(i, 3)
arr(i, 2) = temp2: arr(i, 3) = temp3
End If
End If
Next ii
Next i
Range("I2:K" & letzteZ) = arr
End Sub
gruß
RB
Anzeige
AW: Sortieren per Makro ohne löschen
12.12.2020 14:07:43
Roger
Hallo Herbert, vielen Dank für Deine Mühe. Leider funktioniert es bei mir nicht.
Spalte A sollte so stehen bleiben und B und C sollten sich der Spalte A anpassen. Alle Werte die nicht gedeckt sind sollten so belassen werden sprich nicht gelöscht werden.
Gruess Roger
AW: Sortieren per Makro ohne löschen
12.12.2020 14:15:50
ralf_b
keine Ahnung was du da anders siehst als ich. Leider habe ich den Ergebnisbereich nicht wieder aufs Orignal zurückgesetzt. I2:K kannst du noch anpassen.
die in A fehlenden Werte landen unten in der Liste.
update :)
12.12.2020 14:26:09
ralf_b

Sub CommandButton1_Click()
Dim arr, i, ii, temp2, temp3
Dim letzteZ As Long
Dim letzteA As Long
Dim letzteB As Long
letzteA = Cells(Rows.Count, 1).End(xlUp).Row
letzteB = Cells(Rows.Count, 2).End(xlUp).Row
letzteZ = IIf(letzteA > letzteB, letzteA, letzteB)
arr = Range("A2:C" & letzteZ)
For i = 1 To letzteZ - 1
For ii = i + 1 To letzteZ - 1
If arr(i, 1)  "" Then
If arr(i, 1) = arr(ii, 2) Then
temp2 = arr(ii, 2): temp3 = arr(ii, 3)
arr(ii, 2) = arr(i, 2): arr(ii, 3) = arr(i, 3)
arr(i, 2) = temp2: arr(i, 3) = temp3
End If
End If
Next ii
Next i
Range("B2:C" & letzteZ - 1) = arr
End Sub

Anzeige
AW: Sortieren per Makro ohne löschen
12.12.2020 13:40:12
Daniel
HI
ich würde hier per Formel in einer Hilfsspalte die Sortierreihenfolge ermitteln und dann per Excel-Sortierfunktion sortieren.
Geht einfacher und dürfte auch schneller sein (außer, du programmierst den Quicksort nach)
allerdings musst du die "intelligente Tabelle" zwischendrin aufheben.
entweder hast du keine "intelligente Tabelle" oder alle Zeilen sind Teil der "intelligenten Tabelle" aber so eine Mischung wie du in deiner Beispieldatei hast, ist Unsinn.
der Code würde dann so aussehen, Spalte D sollte leer sein, ansonsten müsstest du halt eine Spalte einfügen und diese wieder löschen.
Sub test()
Dim lZ As Long
lZ = Cells(Rows.Count, 3).End(xlUp).Row
With Range("D2:D" & lZ)
.FormulaR1C1 = "=Match(RC2,R2C1:R" & lZ & "C1,0)"
.Offset(0, -2).Resize(, 3).Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
.ClearContents
End With
End Sub
Gruß Daniel
Anzeige
AW: Sortieren per Makro ohne löschen
12.12.2020 14:11:44
Roger
Hoi Daniel, klingt interessant....
Aber Quicksort sagt mir leider nichts und per Formeln sortierreihenfolge ermitteln sagt mir leider auch nichts...
intelligente Tabelle habe ich leider auch nicht wirklich wissen davon.
Je mehr ich im Forum bin so mehr merke ich das mein Excelwissen nicht so gut ist als angenommen...
Wenn Du mir hier etwas als beispiel geben könntest wäre ich sehr froh
Beste Grüsse
Roger
AW: Sortieren per Makro ohne löschen
12.12.2020 17:20:25
Herbert_Grom
Hallo Daniel,
über die "intelligenten" Tabellen bin ich auch gestolpert. Doch da diese mittendrin sind, ging ich schon davon aus, dass sie keine Funktion haben und habe sie entfernt. Deine Lösung ist genial! Auf diesen kurzen, knackigen Weg wäre ich so nicht gekommen! Und so habe auch ich davon profitiert! Danke!
Allerdings hätte ich eine kleine Änderung gemacht, mit der dein Code, gerade für nicht so "Bewanderte" besser zu verstehen wäre:
Private Sub CommandButton1_Click()
Dim lZ As Long
lZ = Cells(Rows.Count, 3).End(xlUp).Row
With Range("D2:D" & lZ)
.FormulaLocal = "=VERGLEICH($B2;$A$2:$A$" & lZ & ";0)"
.Offset(0, -2).Resize(, 3).Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
.ClearContents
End With
End Sub
Servus
Anzeige
AW: Sortieren per Makro ohne löschen
12.12.2020 20:15:40
Roger
Funktioniert! Vielen Dank! Ihr seit der Wahnsinn! DANKE
AW: Sortieren per Makro ohne löschen
12.12.2020 22:22:24
Daniel
ja, kann man machen.
aber man kann sich die Formel ja in der Tabelle anschauen, wenn man das Makro mal im Einzelstep durchgeht.
FormulaR1C1 verwende ich, weil
- der Recorder so aufzeichnet, dh ich brauche die Formel nicht in VBA zu "programmieren" sondern kann sie direkt im Tabellenblatt erstellen und zeichne das dann VBA-tauglich auf (ist vorallem bei komplexen Formeln hilfreich, weil es Tippfehler vermeidet).
- FormulaR1C1 funktioniert unabhängig von der Länderversion, dh der Code läuft so auch auf einem nicht deutschen Rechner.
- R1C1 ist besser für die Programmierung aus zwei gründen:
a) relative Zellbezüge können auch relativ beschrieben werden. Damit sind die Formeltexte unabhängig von der Zielzelle und relative Zellbezüge müssen nicht angepasst werden, wenn sich die Zielzelle ändert. Das erleichtert die Erstellung der Formel in sich verändernden Tabellen.
b) Spalten werden auch als Zahl dargestellt, immer dann hilfreich, wenn eine Spaltennummer per Variable in die Formel eingebracht werden muss, weil in VBA die Spaltennummer einfacher zu ermitteln ist als der Spaltenbuchstabe.
Gruß Daniel
Anzeige
AW: Sortieren per Makro ohne löschen
13.12.2020 09:21:50
Herbert_Grom
Hallo Daniel,
deine Argumente stimmen alle. Wahrscheinlich ist es meine Aversion gegen die andere Schreibweise.
Servus
AW: Sortieren per Makro ohne löschen
15.12.2020 19:58:46
Roger
Kann man dieses Makro ergänzen das es mit Blattschutz funktionieren würde? Habe es schon Probiert mit Protect es kam aber eine Meldung bei .FormulaR1C1 = "=Match(RC2,R2C1:R" & lZ & "C1,0)"
Sub test()
Dim lZ As Long
lZ = Cells(Rows.Count, 3).End(xlUp).Row
With Range("D2:D" & lZ)
.FormulaR1C1 = "=Match(RC2,R2C1:R" & lZ & "C1,0)"
.Offset(0, -2).Resize(, 3).Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
.ClearContents
End With
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige