Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1500to1504
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-Makro funktioniert nicht

Sortieren-Makro funktioniert nicht
03.07.2016 22:45:47
mike49
Hallo Leute,
ich habe eine Gema-Liste erstellt und Titel eingetragen. Wenn ich nun auf den Button "Sortieren" klicke, werden alle Einträge gelöscht.
Richtig sollte es so sein:
Wenn beliebige Titel rausgelöscht oder neue Titel in die leeren Zeilen eingetragen werden, sollen nach Drücken des "Sortieren"-Buttons die Titel neu alphabetisch sortiert und evtl. leere Zeilen durch die neue Sortierung quasi "aufgefüllt" werden.
Was läuft da falsch? Könnte sich das Makro mal jemand anschauen?
Ich lade die Datei mal hoch: https://www.herber.de/bbs/user/106714.xlsm
Gruß
mike49

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortieren-Makro funktioniert nicht
04.07.2016 09:26:11
Werner
Hallo Mike,
ein Hinweis. Stell hier zusätzlich noch das Makro separat ein. Es gibt Helfer, die aus Sicherheitsgründen keine mit Makros downloaden.
Aber nicht vergessen den Beitrag als offen zu markieren.
Gruß Werner

AW: Sortieren-Makro funktioniert nicht
04.07.2016 09:55:38
UweD
Hallo
Zitat aus deinem Makro:
'Kopieren der ungeraden Zellbereiche (Spalte A und D bis AD)
'zwischen Zeile 13 und Zeile 145 auf das neue Tabellenblatt

In den ungeraden Zeilen, sind aber keine Daten. Nur in den Geraden, ab Zeile 14 beginnend.
soll das wirklich so sein?

AW: Sortieren-Makro funktioniert nicht
04.07.2016 10:01:44
Herbert
Hallo mike49,
warum soll eigentlich der Tabelleninhalt in ein neues Tabellenblatt kopiert werden? Man kann doch auch innerhalb des aktiven Tabellenblattes sortieren!
Servus
P.S.: Außerdem hast Du (oder der Makroschreiber) schon mal vergessen, das "Application.ScreenUpdating" wieder auf "true" zu stellen. Das ist ganz schlecht!

Anzeige
ScreenUpdating wird automatisch zurückgesetzt
04.07.2016 10:21:54
Matthias
Hallo Herbert
Sub tt()
MsgBox Application.ScreenUpdating
Application.ScreenUpdating = False
MsgBox Application.ScreenUpdating
End Sub
Schon mal getestet? ;-)
Einfach 2x laufen lassen.
Gruß Matthias

AW: Sortieren-Makro funktioniert nicht
04.07.2016 11:23:48
UweD
Hallo nochmal
ich hab es mir nochmal genauer angesehen.
nur Tips, keine fertige Lösung...
Das ganze hin und zurückkopieren machst du scheinbar nur, da die Leerzeilen unter den Einträgen so erhalten bleiben sollen.
Also nur Optik
Wären Die nicht da, wäre alles im Tabellenblatt selbst regelbar
(doppelte Löschen, Sortieren)
- Du beginnst in Zeile 13, ermittelst, ob die Zeile ungerade ist, kopierts diese... next usw.
Tips, wie du es (schneller) machen könntest.
- erstmal sind keine Daten in den ungeraden Zeilen. also ab 14 beginnen
- dann kannst du auch sofort mit Step 2 zählen und die Prüfung auf ungerade weglassen
So könnte das aussehen...

For i = 14 To 147 Step 2
With ActiveSheet
.Cells(i, "A").Copy _
Destination:=ws.Cells(j, "A")
.Range(.Cells(i, "C"), .Cells(i, "AA")).Copy _
Destination:=ws.Cells(j, "B")
j = j + 1
End With
Next

oder noch ganz anders...
- Du kopierst ja jede 2. Zeile
- Dann prüfst zu wieder einzeln mit einer Schleife auf Doppelte und löschst Diese raus.
- und sortierst dann
Alternativ...
- Du könntes den gesamten Bereich kopieren,
- sortieren, (dabei werden die Leerzeilen nach untern gesetzt)
- mit der Funktion Duplikate entfernen die Doppelten rauslöschen
- und dann wieder zurückspeichern...
Oder aber ganz anders: du überlegst dir einen Aufbau OHNE Leerzeilen..
Gruß UweD

Anzeige
AW: Sortieren-Makro funktioniert nicht
04.07.2016 11:52:32
mike49
Hallo Leute,
danke für die schnelle Hilfe.
UweD hat Recht. Einträge sind oder werden nur in den geraden Zeilen von Zeile A14 bis AA146 gemacht.
Wenn ich jetzt Einträge manuell rauslösche und durch neue ersetze, soll mit dem Makro das vorhandene Tabellenblatt neu sortiert werden. Es soll in kein neues Blatt kopiert werden. Ebenfalls sollen keine Eintrags-Leerzeilen zwischen den Einträgen stehen bleiben. Die Darstellung mit den ungeraden Einträgen ist so vorgegeben.
Leider bin ich makromäßig nicht so fit, um das selbst abzuändern bzw. neu aufzusetzen. Ich wäre dankbar, wenn jemand von euch helfen könnte. Das reine Sortieren Makro sieht so aus (hat jemand vor längerem hier im Forum für mich gemacht):
Sub Sortieren1()
'Variablendimensionierung
Dim i As Long, j As Long
Dim ws As Worksheet
'Variableninitialisierung
j = 1
'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False
'Tabellenblatt wird hinzugefügt
Set ws = Worksheets.Add
ws.Visible = xlVeryHidden
'Kopieren der ungeraden Zellbereiche (Spalte A und D bis AD)
'zwischen Zeile 13 und Zeile 145 auf das neue Tabellenblatt
For i = 13 To 145
If i Mod 2 = 1 Then
With ActiveSheet
.Cells(i, "A").Copy _
Destination:=ws.Cells(j, "A")
.Range(.Cells(i, "C"), .Cells(i, "AA")).Copy _
Destination:=ws.Cells(j, "B")
j = j + 1
End With
End If
Next
With ws
'Nach doppelten Einträgen überprüfen und Inhalte löschen!
For i = 1 To 67
If Application.WorksheetFunction.CountIf(.Range("J18:J" & i), .Cells(i, "J")) > 1 Then
.Range("J" & i & ":Z" & i).ClearContents
End If
Next
'Spalten des neuen Tabellenblattes sortieren
.[A1:Z67].Sort Key1:=ws.[J1], Order1:=xlAscending, _
Key2:=ws.[I1], Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
xlSortNormal
End With
'Bereiche auf dem aktiven Blatt löschen
With ActiveSheet
.[A13:A145].ClearContents
.[C13:AA145].ClearContents
End With
'Die Variable wird neu initialisiert!
j = 13
For i = 1 To 67
With ws
'Ist kein Liedtitel vorhanden, wird der Inhalt der ganzen Zeile gelöscht
If .Cells(i, "J") = "" Then
Range(.Cells(i, "A"), .Cells(i, "AA")).ClearContents
End If
'Zeilen vom hinzugefügten Tabellenblatt wieder zurückkopieren
.Cells(i, "A").Copy _
Destination:=ActiveSheet.Cells(j, "A")
.Range("B" & i & ":" & "AB" & i).Copy _
Destination:=ActiveSheet.Cells(j, "C")
j = j + 2
End With
Next
'Fehlermeldung ausschalten
Application.DisplayAlerts = False
'Hinzugefügtes Tabellenblatt wird wieder sichtbar und dann gelöscht
With ws
.Visible = True
.Delete
End With
[A1].Select
'Fehlermeldung wieder einschalten
Application.DisplayAlerts = True
End Sub
Gruß mike49

Anzeige
sortieren zweizeilig
04.07.2016 13:12:14
Michael
Hi zusammen,
das hier tut anscheinend:
Sub sortierenNeu()
Dim a, aIn, aOut, i&, k&, z&
ReDim a(13 To 146, 0)
For i = 13 To 146: a(i, 0) = i: Next
Range("K13:K146").Copy Range("BB13")
Range("BC13:BC146") = a
Range("BB13:BC146").Sort Range("BB13"), xlAscending, Header:=xlNo
Range("BB13:BC146").RemoveDuplicates Columns:=1, Header:=xlNo
a = Range("BB14").CurrentRegion
aIn = Range("A1:AA146")
aOut = Range("BD13:BD146").Resize(, 27) ' da ist nix!
z = 0
For i = 1 To UBound(a)
z = z + 2
For k = 1 To UBound(aIn, 2)
aOut(z, k) = aIn(a(i, 2), k)
Next
Next
Range("A13:aa146") = aOut
End Sub
Schöne Grüße,
Michael

Anzeige
So funktioniert's wie gewollt . . .
04.07.2016 22:40:10
mike49
. . . war den ganzen Tag unterwegs und bin erst jetzt wieder zurück, weshalb ich mich erst jetzt bei dir bedanken kann.
Gruß
mike49

freut mich, danke für die Rückmeldung
05.07.2016 00:21:32
Michael
und Gruß zurück,
Michael

334 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige