Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Gruppen nach Kalenderwochen sortieren.

Forumthread: Gruppen nach Kalenderwochen sortieren.

Gruppen nach Kalenderwochen sortieren.
23.01.2025 14:32:59
Bernd_
Hallo Zusammen,

in meiner Beispieldatei befinden sich in Spalte A-B-C 3 Gruppen mit Namen der Mitarbeiter ( Gruppe1 Gruppe2 Gruppe3).In Der Zelle A1 steht Spätschicht . In der Zelle B1 steht Nachtschicht und in der Zelle C1 steht Frühschicht.
Das ist die Reihenfolge mit der in KW 1 die einzelnen Gruppen Ihre Schichten beginnen.

In Zelle E1 soll immer die Kalendernummer eingetragen werden.

In Spalte F stehen die einzelnen Kalenderwochen. In den Spalten G H und I die Reihenfolgen der Schichten für die einzelnen Gruppen.

Soweit so gut.

Ist es möglich wenn ich z.B in Zelle E1 die Kalenderwoche 5 eingebe ( jetzt steht noch Kalenderwoche 1 in der Zelle ) das die Gruppen in den Spalten A B und C nach den Schichten verschoben werden ?
In KW 5 hätte dann Gruppe1 Frühschicht Gruppe2 Spätschicht und Gruppe3 Nachtschicht
Würde mich über Hilfe sehr freuen.
https://www.herber.de/bbs/user/175069.xlsm
Gruß Bernd_




Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gruppen nach Kalenderwochen sortieren.
23.01.2025 16:44:27
UweD
Hallo

- Rechtsclick auf den Tabellenblattreiter
- Code anzeigen
- Code rechts rein kopieren

Bei Änderung der Zelle E1 läuft das Makro ab

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Zeile As Integer, G1 As String, G2 As String, SP As Integer

On Error GoTo Fehler
Const APPNAME = "Worksheet_Change"
If Not Intersect(Target, Range("E1")) Is Nothing Then
If Target 1 Or Target > 53 Or Target = "" Then
MsgBox "Unzulässige Eingabe"
Exit Sub
End If

Zeile = WorksheetFunction.Match(Target, Columns("F"), 0)

G1 = Cells(Zeile, 7)
G2 = Cells(Zeile, 8)

SP = WorksheetFunction.Match(G1, Range("A1:C1"), 0)
If SP > 1 Then
Application.EnableEvents = False
Columns(SP).Cut
Columns(1).Insert Shift:=xlToRight
End If

SP = WorksheetFunction.Match(G2, Range("A1:C1"), 0)
If SP > 2 Then
Application.EnableEvents = False
Columns(SP).Cut
Columns(2).Insert Shift:=xlToRight
End If
End If

'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number > 0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub


LG UweD
Anzeige
Es würde dafür auch...
24.01.2025 18:52:35
Case
Moin Bernd, :-)

... eine VBA freie Lösung mit Power Query geben. Wenn du dich für diesen Weg interessierst und dafür ein Beispiel brauchst, dann melde dich kurz. :-)

Servus
Case
AW: Es würde dafür auch...
25.01.2025 16:01:20
Bernd_
Hallo Case,

das würde och auf jeden Fall gerne mal testen.

Gruß Bernd_
Anzeige
In den Anlagen...
25.01.2025 19:27:50
Case
Moin Bernd, :-)

... mal ein Beispiel. Erklärung in der Datei: ;-)
https://www.herber.de/bbs/user/175253.xlsx

Das ist ohne VBA. Hat den Nachteil, dass du nach Eingabe der KW STRG+ALT+F5 drücken musst (wenn du in der Ergebnistabelle bist nur ALT+F5).

Das könnten wir mit etwas VBA umgehen: ;-)
https://www.herber.de/bbs/user/175255.xlsb

Hier noch Informationen zu Power Query:
https://learn.microsoft.com/de-de/power-query/power-query-what-is-power-query
https://support.microsoft.com/de-de/office/hilfe-zu-power-query-f%C3%BCr-excel-2b433a85-ddfb-420b-9cda-fe0e60b82a94
https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

Servus
Case
Anzeige
AW: In den Anlagen...
25.01.2025 20:00:06
Bernd_
Hallo Case,

danke dafür .

Was kann man machen wenn man z.B nur die Frühschicht und die Spätschicht benötigt ?

Danke Bernd_
Da könnte man...
26.01.2025 00:12:20
Case
Moin Bernd, :-)

... z. B. die neuen Kontrollkästchen (aus Einfügen - Steuerelemente) nehmen und die in PQ abfragen. ;-)

Servus
Case
Anzeige
AW: In den Anlagen...
28.01.2025 20:29:32
Bernd_
Hallo Case,

ich habe versucht Deine Datei nach zu bauen.

Mir gelinkt es nicht. Hast Du das alles manuell eingegeben unter Query ?
Das zum Beispiel ?
= Excel.CurrentWorkbook(){[Name="tblSchichten"]}[Content]



Gruß Bernd_
Also zuerst habe ich...
28.01.2025 21:07:19
Case
Moin Bernd, :-)

... den einzelnen Bereichen Namen vergeben: ;-)
Userbild

Die Daten im PQ-Editor habe ich von Hand eingegeben. Das sind am Anfang immer/häufig die gleichen Zeilen: ;-)

SourceS = Excel.CurrentWorkbook(){[Name="tblSchichten"]}[Content],

SourceG = Excel.CurrentWorkbook(){[Name="tblGruppen"]}[Content],
KWInput = Excel.CurrentWorkbook(){[Name="KWInput"]}[Content]{0}[Column1],
Hier werden die Daten aus dem Bereich mit den Namen eingelesen.


FilterS = Table.SelectRows(SourceS, each [KW] = KWInput),
Hier wird nach der eingegebenen KW gefiltert.


ColumnR = Table.RenameColumns(SourceG, {{"Gruppe 1", FilterS{0}[Gruppe 1]}, {"Gruppe 2", FilterS{0}[Gruppe 2]}, {"Gruppe 3", FilterS{0}[Gruppe 3]}}),
Nun werden nach der gefilterten KW die Spalten umbenannt.


TableRe = Table.ReorderColumns(ColumnR, {"Spätschicht", "Nachtschicht", "Frühschicht"})
Diese Zeile sorgt dafür, dass immer "Spätschicht" vorne steht.

Wenn du nur (z. B. mit Kontrollkästchen) eine oder zwei Spalten anzeigen möchtest, dann ist es am bequemsten etwas VBA zu implementieren, denn PQ ist bei Änderung der Spalten - welche nicht aus der Quelle resultieren - etwas zickig. ;-)

Wenn du das angehen möchtest, kann ich dir ein Beispiel zeigen.

Ich kann euch sowas auch fertig machen. Mache manchmal noch etwas freiberuflich. ;-)

Servus
Case
Anzeige
AW: Gruppen nach Kalenderwochen sortieren.
23.01.2025 19:33:17
Bernd_
Hallo UweD,

erstmal möchte ich mich bei Dir bedanken.

Ich habe das Makro nach Deiner Beschreibung eingesetzt.
Wenn ich in Zelle E1 die KW 1 eingebe dann passt die Zuordnung.
Wenn ich aber in Zelle E1 die KW 2 eingebe dann hätte Gruppe 1 Frühschicht wird aber in Spalte B bei Spätschicht angezeigt.
Gruppe 2 hätte somit Spätschicht und wird in Spalte C also Nachtschicht angezeigt.
Gruppe 3 hätte Nachtschicht und wird in Spalte A bei Frühschicht angezeigt.

Wenn ich in Zelle E1 die KW 4 eingebe werden die Gruppen richtig zugeordnet.

Habe ich etwas falsch gemacht ? Eventuell beim einfügen.

Wäre super wenn Du das mal testen kannst ob ich da was verbockt habe.

Danke Bernd_




Anzeige
AW: Gruppen nach Kalenderwochen sortieren.!!
23.01.2025 20:06:26
Bernd_
Eventuell habe ich es falsch erklärt.
In der Spalte A soll immer die Gruppe sein die Spätschicht hat.
In Spalte B soll immer die Gruppe sein die Nachtschicht hat.
Und in Spalte C soll immer die Gruppe stehen die in der eingegebenen KW Frühschicht hat.

Sorry für meinen Fehler.

Kann man da noch was retten ?

Anzeige
AW: Gruppen nach Kalenderwochen sortieren.!!
24.01.2025 03:33:08
emkaes
Hallo,

bastel die eine Mitarbeiterliste mit deinen 3 Gruppen. Ich habew Sie Nach M1:O16 geschrieben. Es ist aber wurscht, wo du deine hast/haben willst.
Musst es aber dann im Code anpassen ( ist kenntlich gemacht )

Das Makro macht folgendes nach einer ordnungsgemäßen Änderung in E1

Mitarbeiterliste einlesen aus M1:Oxxx nach Array arr
Datenreihe für die Anzahl der Mitarbeiter einlesen nach Array arr1
Aus der gemäß E1 festgestellten Zelle in Spalte G den Anfangsbuchstaben nutzen, um Reihenfolge der Spalten zu ermitteln und nach Array arr2 schreiben
Schließlich das Mitarbeiterarray arr neu sortiert einlesen in ein Ausgabearray out
A2:Cxxx löschen
Ausgabearray out nach A2:Cxxxx schreiben


Private Sub Worksheet_Change(ByVal Target As Range)

Dim arr As Variant, arr1 As Variant, arr2 As Variant, out As Variant
If Not Intersect(Target, Range("E1")) Is Nothing And Target.Count = 1 Then
If Target.Value >= 1 And Target.Value = 53 Then

With Range("M1").CurrentRegion ' anpassen für eine Mitarbeiterliste 3-spaltig
arr = .Offset(1).Resize(.Rows.Count).Value
End With

arr1 = Application.Transpose(Application.Evaluate("ROW(" & LBound(arr) & ":" & UBound(arr) & ")"))

Application.EnableEvents = False

Select Case Left(Cells(Range("E1").Value + 1, 7), 1)
Case Is = "S"
arr2 = Split("1,2,3", ",")
Case Is = "N"
arr2 = Split("3,1,2", ",")
Case Else
arr2 = Split("2,3,1", ",")
End Select

out = Application.Index(arr, Application.Transpose(arr1), arr2)

Cells(2, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 3).ClearContents

Cells(2, 1).Resize(UBound(out, 1), 3) = out
End If
End If
Application.EnableEvents = True
End Sub
Anzeige
Danke
24.01.2025 05:59:49
Bernd_
Hallo emkaes,

Danke für Deine Hilfe.

Das Makro funktioniert wie gewünscht.

Wirklich Klasse was man mit so "wenig" Code erreichen kann.

Danke und Gruß Bernd_
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18