Clever-Excel-Forum

Normale Version: Makro Sortierung mehrerer Spalten zusammenhängend
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi Leute,

ich habe eine Liste mit mehreren Spalten zum sortieren.

Die Eingaben sind in den Zeilen B3:H3, das geht dann bis B50:H50, dann geht die Tabelle weiter von J3:O3 auch bis J50:H50 und dann wieder von Q3:V3 auch bis Q50:V50

Ich würde gerne diese verschiedenen Spalten zusammenhängend sortieren, nach Datum in der Spalte F. Gibt's da vielleicht ein Makro oder sonst was??

Musterliste anbei, vielen Dank für die Hilfe Grüße Rayker
Hi Rayker,

die Tabelle ist doch sch...  ...uboptimal aufgebaut. Schreibe alle Daten untereinander und du benötigst nur die Bordmittel, um zu sortieren, ggfls. filtern.
Hi Günther, die Idee ist schon richtig!! Ich hab da viele Formatierungen und automatische Formeln drinnen, die das Datum dann immer wieder aktualisieren in den nebenstehenden Spalten, deswegen würde ich sie gerne so lassen.

Dachte es ist halt per Makro am besten zu lösen Huh

Grüße Rayker
Hi Rayker,

da ich kein VBAler bin, kann ich dir mit einem Makro nicht helfen. Was hältst du aber davon:

- mit STRG-T oder L eine intelligente Liste kreieren (Bereich B2:Hxx)
- dann nach Datum filtern

Im Anhang deine Datei zum Spielen  :32:

[attachment=11153]
Hi,

da reicht es doch einfach, die Bereiche auszuschneiden und unten dranzuhängen. Dazu noch eine Formel und gut is:



Arbeitsblatt mit dem Namen 'PKW HU_AU'
 BCDEFGH
1PKW   Hauptuntersuchung (TÜV) Abgasuntersuchung
2PKW
Kennz.Interv.Auszuführende ArbeitenDatum
PKW
Km-StandStatus
303.2015HD-XY 12324 Monate.Haupt.-Abgasuntersuchung03.2017 Erledigt
405.2015HD-XY 12424 Monate.Haupt.-Abgasuntersuchung05.201774.078Erledigt
505.2015HD-XY 12524 Monate.Haupt.-Abgasuntersuchung05.201728.239Erledigt
605.2015HD-XY 12624 Monate.Haupt.-Abgasuntersuchung05.2017 Offen
705.2015HD-XY 12724 Monate.Haupt.-Abgasuntersuchung05.2017 Offen
803.2017HD-XY 12324 Monate.Haupt.-Abgasuntersuchung03.2019 Offen
905.2017HD-XY 12424 Monate.Haupt.-Abgasuntersuchung05.2019 Offen
1005.2017HD-XY 12524 Monate.Haupt.-Abgasuntersuchung05.2019 Offen
1105.2017HD-XY 12624 Monate.Haupt.-Abgasuntersuchung05.2019 Offen
1205.2017HD-XY 12724 Monate.Haupt.-Abgasuntersuchung05.2019 Offen
1303.2017HD-XY 12324 Monate.Haupt.-Abgasuntersuchung03.2019 Offen
1405.2019HD-XY 12424 Monate.Haupt.-Abgasuntersuchung05.2021 Offen
1505.2019HD-XY 12524 Monate.Haupt.-Abgasuntersuchung05.2021 Offen
1605.2019HD-XY 12624 Monate.Haupt.-Abgasuntersuchung05.2021 Offen
1705.2021HD-XY 12724 Monate.Haupt.-Abgasuntersuchung05.2023 Offen

ZelleFormel
F3=EDATUM(B3;D3)
B8=VERWEIS(C8;$C$3:$F7)
F8=EDATUM(B8;D8)
Vielen Dank an alle, ich versuch das mal, Grüße Rayker
Hallo zusammen,

Edgar, mit Edatum() alleine geht es nicht, so wie der TE es bisher hat.
Denn er möchte folgende Unterscheidungen in der bedingten Formatierung treffen:

aktueller Monat und offen in Spalte Status -> Farbe = gelb
Datum < Heute und offen in Spalte Status -> Farbe = rot

Deswegen sträubt er sich auch, die Tabellen untereinander zu kopieren. Weil in sehr wenigen Fällen der Intervall abweicht.

Ich habe eine Makrolösung.
Dazu habe ich eine zusätzliche Tabelle in die Datei eingefügt, die ich mit "Gesamtübersicht" benannt habe.

Beim betreten der Tabelle werde die Tabellen aus dem Blatt "PKW HU_AU" dort untereinander kopiert und nach Spalte §Datum PKW" sortiert.
Folgender Code muss deswegen in das Codefenster der Tabelle "Gesamtübersicht" eingefügt werden:


Code:
Private Sub Worksheet_Activate()
Call sortieren
End Sub

Folgenden Code in ein allgemeines Modul einfügen:


Code:
Sub sortieren()
Dim i As Long
Dim s As Long, z As Long
Dim lngZ As Long
Dim lngAnzahl As Long

Dim wksQ As Worksheet
Dim wksSort As Worksheet

Set wksQ = Sheets("PKW HU_AU")
Set wksSort = Sheets("Gesamtübersicht")

Application.ScreenUpdating = False
With wksSort
 .Range("A3:G" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1).Clear
End With

With wksQ
 lngZ = .Cells(.Rows.Count, 2).End(xlUp).Row
 lngAnzahl = Application.CountIf(.Rows(1), "PKW   Hauptuntersuchung (TÜV) Abgasuntersuchung")
 s = 8
 z = 3
 For i = 1 To lngAnzahl
   wksSort.Cells(z, 1).Resize(lngZ - 2) = .Range(.Cells(3, 2), .Cells(3 + lngZ - 2, 2)).Value
   wksSort.Cells(z, 2).Resize(lngZ - 2, 6) = .Range(.Cells(3, s - 5), .Cells(3 + lngZ - 2, s)).Value
     s = s + 7
     z = z + lngZ - 2
 Next i
   .Range("F3").Copy
   wksSort.Range("E3:E" & (lngZ - 2) * lngAnzahl + 2).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
       SkipBlanks:=False, Transpose:=False
End With

With wksSort
 .Range("A3:G" & (lngZ - 2) * lngAnzahl + 2).Sort key1:=.Range("e3"), order1:=xlAscending
 .Cells(1, 1).Select
End With
Application.ScreenUpdating = True
End Sub

Bei Bedarf kann er auch jederzeit  manuell oder per Schaltfläche gestartet werden.



Damit alles passt, habe ich die Formeln für das Datumund die Bedingte Formatierung angepast.
Hier für den ersten Bereich:


Arbeitsblatt mit dem Namen 'PKW HU_AU'
 BCDEFGH
1PKW   Hauptuntersuchung (TÜV) Abgasuntersuchung
2PKW
Kennz.Interv.Auszuführende ArbeitenDatum
PKW
Km-StandStatus
303.2015HD-24 Monate.Haupt.-Abgasuntersuchung03.2017 Erledigt
405.2015HD-24 Monate.Haupt.-Abgasuntersuchung05.2017 Erledigt
505.2015HD-24 Monate.Haupt.-Abgasuntersuchung05.2017 Erledigt
ZelleFormel
F3=DATUM(JAHR(B3); MONAT(B3)+D3; TAG(MONATSENDE(B3;0)))
Zellebedingte Formatierung...Format
F31: =UND(JAHR(F3)=JAHR(HEUTE());MONAT(F3)=MONAT(HEUTE());H3="Offen")abc
F32: =UND(JAHR(F3)=JAHR(HEUTE());MONAT(F3)=MONAT(HEUTE());H3="Offen")abc
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Die Formel in den nächsten dann so:

Arbeitsblatt mit dem Namen 'PKW HU_AU'
 JKLMNO
1PKW   Hauptuntersuchung (TÜV) Abgasuntersuchung
2Kennz.Interv.Auszuführende ArbeitenPKW

 HU/AU
Km-StandStatus
3HD-24 Monate.Haupt.-Abgasuntersuchung03.2019 Offen
4HD-24 Monate.Haupt.-Abgasuntersuchung05.2019 Offen
5HD-24 Monate.Haupt.-Abgasuntersuchung05.2019 Offen
ZelleFormel
M3=DATUM(JAHR(F3); MONAT(F3)+K3; TAG(F3))
Zellebedingte Formatierung...Format
M31: =UND(JAHR(M3)=JAHR(HEUTE());MONAT(M3)=MONAT(HEUTE());O3="Offen")abc
M32: =UND(JAHR(M3)=JAHR(HEUTE());MONAT(M3)=MONAT(HEUTE());O3="Offen")abc
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Die Formel können von den Formelexperten gerne vereinfacht werden.

Unten die Beispielmappe mit den eingearbeiteten Dingen:


[attachment=11165]
Hi atilla,



Zitat:mit Edatum() alleine geht es nicht, so wie der TE es bisher hat.

zumindest in der Formel geht das allemal.

Hier mal meine Version:

[attachment=11166]
Hallo Edgar,

na, passend machen gilt nicht.
In Deiner Variante geht es natürlich, aber der TE hat ganz andere Voraussetzungen unabhängig vom Aufbau, aber deshalb hat er eben diesen Aufbau so gewählt.

Ein Fahrzeug wir neu gekauft und Heute angemeldet. Dann wird ein Intervall von 24 oder 36 Monaten oder... eingetragen.
In den Jahren nach den diesen 24 oder 36 oder ... Monaten muss mit 24 oder ....Monaten gerechnet werden. Das hast Du nicht berücksichtigt.

Außerdem muss das Rot bei Dir gelb sein, weil der Monat noch nicht vorüber ist.
Hi atilla,

1. haben Günter und ich schon am Anfang gesagt, dass der Aufbau suboptimal ist.
2. berücksichtigt meine Formel sehr wohl das Intervall, deswegen ja das EDATUM!
3. ist die Formel des TE für den nächsten Termin sowieso falsch und damit auch die Formatierung.

Die Formatierung wäre so besser:


Code:
=(MONATSENDE(F3;0)-HEUTE()<1)*(H3="Offen")
Seiten: 1 2