man hat mir als Aufgabe aufgetragen quasi eine vereinfachte Leistungsübersicht zu bauen, damit die entsprechenden Kollegen sich Daten einfacher raussuchen können. Ich habe die bestehende Tabelle als Blanko umgebaut und bräuchte eure Hilfe bei den Formeln, da ich momentan auf dem Schlauch stehe.
In der Datei sind 4 Arbeitsblätter mit Liniennummern (Spalte A) und Fahrernamen (Zeilen oberhalb der Ortsbezeichnung, Anzahl ist variabel). Im Diagramm wurde in schwarz markiert, welcher Fahrer welche Linie fahren kann. (Die siebenstellige Zahl unterhalb der Ortsbezeichnung ist für die Auswertung eigentlich nicht relevant)
Da Fahrer aber in allen 4 Arbeitsblättern eingetragen werden können, möchte man gerne wissen, welche Fahrer kann welche Linie fahren oder auf welche Linie kann welcher Fahrer eingesetzt werden.
Könnt Ihr mir eine Hilfestellung geben, wie ich hier am sinnvollsten vorgehe?
eine Kreuztabelle auszuwerten ist schon ein Spiel mit zig Verrenkungen, eine solche mit mehrfachen Überschriftszeilen sehe ich als unmöglich zum Auswerten an. Du solltest eine einfache Excelliste erstellen - diese kann erheblich leichter mit Formeln oder mit einer Pivottabelle ausgewertet werden.
Ich kann zumindest behaupten, dass das Grundgerüst nicht von mir stammt.
Werde aber mal schauen, ob ich die Tabellen so umbauen kann, dass die Kollegen trotzdem damit arbeiten können. Man wollte eigentlich gern dieses Layout behalten.
28.01.2021, 09:23 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2021, 09:24 von schauan.)
Hallöchen,
Du könntest Deine Linienschnittpunkte auch auf Basis einer Liste per Formel füllen, mal abgesehen von der Rechenleistung Hier mal der Ansatz. Die 0 kannst Du per Einstellung ausblenden und >0 verwendest Du als Regel für eine bedingte Formatierung zum anschwärzen .
Arbeitsblatt mit dem Namen 'Linienschnittpunkte 200er'
- Leg 2 neue Blatter an. (Fahrer und Linien) - kopier das Makro in ein normales Modul
Code:
Option Explicit
Sub Fahrer_Linien() Dim TB1 As Worksheet, TB2 As Worksheet, TBx As Worksheet Dim Z1 As Integer, S1 As Integer, Finde As String, Fahrer As String, Linie As String Dim LC As Integer, Z As Integer, S As Integer, ZZ As Integer, ZS As Integer
Set TB1 = Sheets("Fahrer") Set TB2 = Sheets("Linien") S1 = 1 'Spalte A Finde = "er" ' zum Feststellen der Kopfzeilenanzahl
For Each TBx In ThisWorkbook.Sheets If TBx.Name <> TB1.Name And TBx.Name <> TB2.Name Then LC = TBx.Cells.SpecialCells(xlCellTypeLastCell).Column 'Letzte Spalte des gesamten Blattes
Z1 = WorksheetFunction.Match(Finde, TBx.Columns(S1), 1) 'Zeile mit Linen Nummer finden
For S = S1 + 1 To LC 'durchläuft alle Spalten von 2 bis zum Ende For Z = 1 To Z1 - 2 'durchläuft alle Zeilen mit Fahrern
Fahrer = TBx.Cells(Z, S) Linie = TBx.Cells(Z1, S)
If Fahrer <> "" Then
'*** Fahretabelle füllen If WorksheetFunction.CountIf(TB1.Columns(1), Fahrer) > 0 Then 'Fahrer schon vorhanden ZZ = WorksheetFunction.Match(Fahrer, TB1.Columns(1), 0) 'Zeile des Fahrers LC = TB1.Cells(ZZ, TB1.Columns.Count).End(xlToLeft).Column + 1 ' Erste Freie Spalte
'*** Linientabelle füllen If WorksheetFunction.CountIf(TB2.Columns(1), Linie) > 0 Then 'Linie schon vorhanden ZZ = WorksheetFunction.Match(CDbl(Linie), TB2.Columns(1), 0) 'Zeile der Linie finden ** Zahl kein Text LC = TB2.Cells(ZZ, TB2.Columns.Count).End(xlToLeft).Column + 1 ' Erste freie Spalte
TB2.Cells(ZZ, LC) = Fahrer 'FAhrer ergänzen
Else 'neue Linie ZZ = TB2.Cells(TB2.Rows.Count, "A").End(xlUp).Row + 1 'erste freie Zeile TB2.Cells(ZZ, 1) = Linie TB2.Cells(ZZ, 2) = Fahrer