Wenn-Dann/Vergleich/SVerweis
#11
Hallo Elsbeth,

so wie ich das sehe, ist das 1. Blatt (Übersicht Mitarbeiter) uninteressant.
Es geht doch nur um das 2. und 3. Blatt.
Meine Frage ist: Sind die ÜMA in 2. und 3. immer gleich oder können es auch verschiedene sein,
also dass eine Nummer auch nur in einem Blatt vorkommen kann?

Gruß Uwe
Top
#12
Hi Uwe,

die ÜMA sind zu den Namen immer gleich (ist praktisch die Personalnummer) allerdings können in den Tabellenblättern verschiedene Mitarbeiter stehen (mal mehr, mal weniger), Mitarbeiter XYZ mit Personalnummer 12345 kann also in der Urlaubsliste stehen, muss aber nicht unbedingt in der Zeitenliste stehe, weil er Urlaub hatte.

Ich wäre Dir wirklich dankbar, wenn Du mir ein Makro zaubern könntest; die original Tabellen haben bis zu 4.000 Datensätze und die mit der "Hand am Arm" zu bearbeiten ist ätzend und die Fehlerquote sehr hoch.

Vielen Dank & Grüße
Elsbeth
Top
#13
Hallo Elsbeth,

ich beziehe mich genau auf Deine Beispielmappe.
Tabelle5 ist gleich Register 5 (Tabelle2).
Code:
Sub Zusammenfassung()
  Dim rngBereich As Range
  Tabelle4.Rows("2:" & Rows.Count).Delete
  Tabelle5.Cells.Delete
  Tabelle5.Cells(1, 1).Value = "ÜMA"
  With Tabelle2
    Set rngBereich = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
  End With
  If rngBereich.Rows.Count > 1 Then
    Tabelle5.Cells(2, 1).Resize(rngBereich.Rows.Count - 1).Value = _
      rngBereich.Resize(rngBereich.Rows.Count - 1).Offset(1).Value
  End If
  With Tabelle3
    Set rngBereich = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
  End With
  If rngBereich.Rows.Count > 1 Then
    Tabelle5.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(rngBereich.Rows.Count - 1).Value = _
      rngBereich.Resize(rngBereich.Rows.Count - 1).Offset(1).Value
  End If
  With Tabelle5
    .Columns(1).AdvancedFilter Action:=xlFilterCopy, Unique:=True, CopyToRange:=Tabelle4.Cells(2, 1)
  End With
  With Tabelle4
    .Rows(2).Delete
    Set rngBereich = .Cells(2, 1).CurrentRegion
  End With
  Set rngBereich = rngBereich.Resize(rngBereich.Rows.Count - 1).Offset(1)
  With rngBereich
    .Columns(2).Formula = "=VLOOKUP(A2,'Übersicht Mitarbeiter'!A:B,2,0)"
    .Columns(6).Formula = "=VLOOKUP($A2,'Saldo Urlaubskonto'!A:G,7,0)"
    .Columns(7).Formula = "=VLOOKUP($A2,'Saldo Zeitkonto '!A:D,4,0)"
    On Error Resume Next
    .Cells.SpecialCells(xlCellTypeFormulas, 16) = ""
    On Error GoTo 0
    .Value = .Value
  End With
End Sub

Gruß Uwe


Angehängte Dateien
.xls   Test Datei.xls (Größe: 59 KB / Downloads: 4)
Top
#14
Hallo Uwe,

vielen Dank für Deine Mühe!!

Leider funktioniert das Makro nur in der Test Liste, nicht in meiner großen Liste.

Wenn ich das Makro übertrage, tauchen nur die ÜMA Nr. & die dazugehörigen Werte auf aber keine Namen. Was ich darüber hinaus heute erfahren habe, es ist doch wichtig, dass in der Auswertung auch folgende Daten "Meister" "Kurzzeichen" "Kost.-MG" aus Tabelle 1 (Übersicht Mitarbeiter) aufgeführt werden.

Da ich so überhaupt keine Ahnung von Makros habe, denke ich, ich muss bestimmt nur eine Kleinigkeit ändern. Könntest Du mir damit bitte nochmals behilflich sein.

Nochmals Vielen Dank!!!
Elsbeth
Top
#15
Hallo Elsbeth,

wenn die Namen nicht kommen, stimmt der Registername des Blattes mit der Komplettliste nicht
oder die Nummern sind da anders eingetragen/formatiert?

Hier werden die Daten aus den verschiedenen Blättern mit ganz normalen SVERWEIS()-Formeln geholt:

With rngBereich
.Columns(2).Formula = "=VLOOKUP(A2,'Übersicht Mitarbeiter'!A:B,2,0)"
.Columns(6).Formula = "=VLOOKUP($A2,'Saldo Urlaubskonto'!A:G,7,0)"
.Columns(7).Formula = "=VLOOKUP($A2,'Saldo Zeitkonto '!A:D,4,0)"

Genau da müssten dann auch für die noch nicht berücksichtigten Felder entsprechende Zeilen eingefügt werden.

Ändere mal diesen Bereich

Code:
With rngBereich
    .Columns(2).Formula = "=VLOOKUP(A2,'Übersicht Mitarbeiter'!A:B,2,0)"
    .Columns(6).Formula = "=VLOOKUP($A2,'Saldo Urlaubskonto'!A:G,7,0)"
    .Columns(7).Formula = "=VLOOKUP($A2,'Saldo Zeitkonto '!A:D,4,0)"
    On Error Resume Next
    .Cells.SpecialCells(xlCellTypeFormulas, 16) = ""
    On Error GoTo 0
    .Value = .Value
  End With

durch mit Hochkommas auskommentierte Zeilen:

Code:
With rngBereich
    .Columns(2).Formula = "=VLOOKUP(A2,'Übersicht Mitarbeiter'!A:B,2,0)"
    .Columns(6).Formula = "=VLOOKUP($A2,'Saldo Urlaubskonto'!A:G,7,0)"
    .Columns(7).Formula = "=VLOOKUP($A2,'Saldo Zeitkonto '!A:D,4,0)"
'    On Error Resume Next
'    .Cells.SpecialCells(xlCellTypeFormulas, 16) = ""
'    On Error GoTo 0
'    .Value = .Value
  End With

Nun bleiben die Formeln in den Zellen stehen und Fehlerwerte wie #NV werden nicht gelöscht.
So kannst Du besser prüfen, was faul ist.

Gruß Uwe
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste