Microsoft Excel

Herbers Excel/VBA-Archiv

Makro zum Sortieren


Betrifft: Makro zum Sortieren
von: Gig
Geschrieben am: 19.12.2018 15:24:28

http://www.herber.de/bbs/user/126218.xlsx

Hallo,
ich brauche eure Hilfe.Ich habe einen Zellbereich (G10-K19, Größe variable) bei dem Ankaufsdaten und Verkaufsdaten jeweils untereinander in einer separaten Zeile stehen.
Nun möchte ich nach dem Markieren der Range (in meinem Beispiel G10-K19) Mithilfe eines Makros die Daten der Verkaufszeile direkt hinter die Daten des Einkaufs stellen. (Siehe Datei). Danach sollen die Zeilen nach der Einkaufszeit (4. Spalte der Range) sortiert werden. Die von mir markierte Range hat meist unterschiedliche Größe.

Wer kann mir helfen?

Vielen Dank im Voraus!

  

Betrifft: AW: Makro zum Sortieren
von: Daniel
Geschrieben am: 19.12.2018 16:14:45

Hi

im Prinzip mit diesem Code.

Sub test()
With Cells(10, 7).CurrentRegion
    .Sort key1:=.Cells(1, 3), order1:=xlAscending, _
          key2:=.Cells(1, 1), order1:=xlAscending, Header:=xlno
    .Offset(.Rows.Count / 2, 0).Resize(.Rows.Count / 2).Cut _
            Destination:=.Offset(0, .Columns.Count).Resize(1, 1)
End With
With Cells(10, 7).CurrentRegion
    .Sort key1:=.Cells(1, 4), order1:=xlAscending, Header:=xlno
End With
End Sub

der Code passt sich automatisch an die datengröße an.
die Tabelle sollte vollständig von leerzellen umrandet sein.
Gruß Daniel


  

Betrifft: AW: Makro zum Sortieren
von: Gig
Geschrieben am: 19.12.2018 20:08:22

Hallo Daniel,
vielen Dank für deine Antwort.

Im Prinzip funktioniert der Code. Aber sobald die von mir ausgewählte Tabelle(Range) mehr Spalten als im angeführten Beispiel hat, funktioniert das Ausschneiden und Einfügen nicht korrekt.

Woran kann das liegen?


  

Betrifft: AW: Makro zum Sortieren
von: Daniel
Geschrieben am: 19.12.2018 20:15:25

Hi

wie wählst du die Range aus?
mein Code macht das automatisch anhand der gefüllten Zellen (so wie wenn du die erste Zelle anklickst und STRG+A drückst.

willst du den Bereich selber auswählen, dann ggf so:

Sub test()
dim rng as range
set rng = Selection ' hier den Zellbereich zuweisen
With rng
    .Sort key1:=.Cells(1, 3), order1:=xlAscending, _
          key2:=.Cells(1, 1), order1:=xlAscending, Header:=xlno
    .Offset(.Rows.Count / 2, 0).Resize(.Rows.Count / 2).Cut _
            Destination:=.Offset(0, .Columns.Count).Resize(1, 1)
End With
With rng.resize(.Rows.count / 2, .column.count * 2)
    .Sort key1:=.Cells(1, 4), order1:=xlAscending, Header:=xlno
End With
End Sub
beachte, dass die Anzahl der Zeilen des ausgewählten Bereichs gerade sein muss.
(dh Überschrift falls vorhanden nicht mit auswählen)

Gruß Daniel


  

Betrifft: AW: Makro zum Sortieren
von: Gig
Geschrieben am: 19.12.2018 20:41:23

Danke für deine Antwort.

Was meinst du im Code mit "Hier den Zellbereich zuweisen?


  

Betrifft: AW: Makro zum Sortieren
von: Gig
Geschrieben am: 19.12.2018 20:48:31

Und es funktioniert nicht, wenn die von mir markierte Range nicht bei Zelle G10 beginnt.


  

Betrifft: AW: Makro zum Sortieren
von: Daniel
Geschrieben am: 19.12.2018 20:51:58

in einer Beispieldatei war es aber so.

dann musst du den Code halt anpassen, und eben die entsprechende Zelle in den Code eintragen (linke ober Ecke des Zellbereich)
ich kann mich da nur nach der Beispieldatei richten, die du mir gibst.
wenn du die gegenüber deinen Echtdaten veränderst, musst du eben auch meinen Code dann ensprechend anpassen, dabei kann ich dir nicht helfen, weil weder Hellseher bin, noch über die technischen Möglichkeiten verfüge, mich auf deinen Rechner aufzuschalten und mir die Datei anzuschauen.


  

Betrifft: AW: Makro zum Sortieren
von: Daniel
Geschrieben am: 19.12.2018 20:49:03

naja, irgendwo musst du doch angeben, welcher Zellbereich auf diese weise bearbeitet werden soll!
das passiert an dieser Stelle mit Zuweisung des Zellbereichs an eine Variable, damit du das nicht mehrfach im Code wiederholen musst, sondern einfach die Variable verwenden kannst.
da ich nicht weiß, welchen Zellbereich du so umbauen willst, habe ich einfach mal Selection genommen.

Außerdem verstehe ich nicht genau, was du willst.
mit deiner Beispieldatei hat mein Code funktioniert.
mehr kann ich für dich nicht tun, da ich nur die Informationen habe, die du mir gibst.

Gruß Daniel


  

Betrifft: AW: Makro zum Sortieren
von: Gig
Geschrieben am: 19.12.2018 20:56:54

Danke Daniel für deine Antwort.

Ich möchte jenen Zellbereich bearbeiten, den ich in meinem Tabellenblatt markiert habe. Der Bereich ist immer 11 Spalten breit und hat unterschiedliche Anzahl von Zeilen (ist aber immer eine gerade Anzahl von Zellen). Und außerdem beginnt der von mir ausgewählte Datenbereich nie an der gleichen Stelle. Jeden Tag kommen neue Daten hinzu und den neuesten von mir hinzugefügten Bereich möchte ich mit dem Makro auf die beschriebene Weise bearbeiten.


  

Betrifft: AW: Makro zum Sortieren
von: Daniel
Geschrieben am: 19.12.2018 21:00:16

na dann passt mein letzter Codevorschlag doch.


  

Betrifft: AW: Makro zum Sortieren
von: Gig
Geschrieben am: 19.12.2018 21:09:13

Und muss ich den Zellbereich im Code jedesmal händisch zuweisen?


  

Betrifft: AW: Makro zum Sortieren
von: Daniel
Geschrieben am: 19.12.2018 21:10:40

du musst den Zellbereich, der so bearbeitet werden soll, selektieren und dann den Code mit dem set rng = Selection starten


  

Betrifft: AW: Makro zum Sortieren
von: Gig
Geschrieben am: 19.12.2018 21:21:40

Ich habe den entsprechenden Zellbereich markiert und es kommt ein Fehler bei .Rows.Count
Invalid or unqualified reference


  

Betrifft: AW: Makro zum Sortieren
von: Daniel
Geschrieben am: 19.12.2018 21:24:18

bzw dann mit dem Code, der funktioniert:

Sub test()
    Dim rng As Range
    Set rng = Selection ' hier den Zellbereich zuweisen
    With rng
        .Sort key1:=.Cells(1, 3), order1:=xlAscending, _
              key2:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
        .Offset(.Rows.Count / 2, 0).Resize(.Rows.Count / 2).Cut _
                Destination:=.Offset(0, .Columns.Count).Resize(1, 1)
    End With
    With rng.Resize(rng.Rows.Count / 2, rng.Columns.Count * 2)
        .Sort key1:=.Cells(1, 4), order1:=xlAscending, Header:=xlNo
    End With
End Sub
gruß Daniel


  

Betrifft: AW: Makro zum Sortieren
von: Gig
Geschrieben am: 19.12.2018 21:31:42

Jetzt funktioniert es einwandfrei!!

Vielen Dank Daniel!
Schönen Abend!