Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1088to1092
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Strings vergleichen in 2 verschiedenen Tabellen

Strings vergleichen in 2 verschiedenen Tabellen
Mario
Hallo zusammen,
ich versuch mal mein Problem zu beschreiben:
Tabelle 1 ist ein Schichtplan, der die Namen der MA, eingeteilt in verschiedene Gänge, mit dem Zusatz "Gang" enthält, z.B. Mayer Hans 12.
Tabelle 2 ist ein Anwesenheitsplan, der die Namen incl. Personalnummer hat, z.B. Mayer Hans 986754.
Nun möchte ich alle Anwesenden aus Tabelle 2 (stehen in Spalte C) vergleichen mit allen Namen im Bereich A1:F100 der Tabelle 1. Dies mit String der ersten 8 Buchstaben.
Bei Treffer sollen die MA in Tabelle 1 gelb markiert werden, wer nicht getroffen wird, soll blau markiert werden.
Danach sollen alle gelben der Tabelle 1 untereinander ab Zelle E36 und die blauen ab Zelle C 36 aufgelistet - also verschoben - werden. Somit habe ich alle Anwesenden und Abwesenden für die Gangeinteilung parat. (Die Gangeinteilung kann man aus verschiedenen, nicht Excel-Gründen, nicht automatisieren).
Und nun mein versuchter, zusammengemixter Code, der mir aber nur
1. Spalte A und B in einer Tabelle vergleicht
2. Beide farblich markiert:
Sub Vergleichen()
Dim iRowA As Integer, iCounter As Integer, iFirst As Integer, iSecond As Integer
Dim iRowB As Integer
Dim sTxtA As String, sTxtB As String
Dim bln As Boolean
iRowA = 1
iFirst = 1
iSecond = 2
For iCounter = 1 To 2
Do Until IsEmpty(Cells(iRowA, iFirst))
bln = False
iRowB = 1
sTxtA = Cells(iRowA, iFirst).Value
Do Until IsEmpty(Cells(iRowB, iSecond))
sTxtB = Cells(iRowB, iSecond).Value
If Mid(sTxtA, 1, 8) = Mid(sTxtB, 1, 8) Then
bln = True
Cells(iRowA, iFirst).Interior.ColorIndex = 5
End If
iRowB = iRowB + 1
Loop
If bln = False Then Cells(iRowA, iFirst).Interior.ColorIndex = 6
iRowA = iRowA + 1
Loop
iFirst = 2
iSecond = 1
iRowA = 1
Next iCounter
Dim rngzelle        As Range
Dim lngZeile        As Long
lngZeile = 36
With Worksheets("Woche")   'Hier Name des Zielblattes anpassn
For Each rngzelle In ActiveSheet.Range("A1:H100")   'Suchbereich anpassen
If rngzelle.Interior.ColorIndex = 6 Then
.Cells(lngZeile, 5).Value = rngzelle.Value
lngZeile = lngZeile + 1
End If
Next rngzelle
.Range("C36:C100").Sort Key1:=.Range("C36"), _
Order1:=xlAscending, _
Header:=xlNo
End With
End Sub
Könnt ihr mir helfen?
Vielen Dank
Tschau
Mario
AW: Strings vergleichen in 2 verschiedenen Tabellen
26.07.2009 14:32:41
fcs
Hallo Mario,
Ich verstehe nicht, warum du den Zeichenvergleich auf 8 Zeichen beschränken willst. Eigentlich muss du doch immer Name+Vorname vergleichen und nicht nur 8 Zeichen davon.
Ansonsten kanst du mit folgenden Anpassungen den Vergleich machen. Die Namen der Blätter muss du entsprechend anpassen.
Gruß
Franz
Sub Vergleichen()
Dim iSecond As Long
Dim iRowB As Long
Dim sTxtA As String, sTxtB As String
Dim bln As Boolean
Dim wksSchicht As Worksheet, wksAnwesend As Worksheet, rngZelle As Range
Dim wksWoche As Worksheet
Dim lngZeileTreffer As Long, lngZeileKeinTreffer As Long
Const FarbeKeinTreffer As Long = 6
Const FarbeTreffer As Long = 5
Const Trefferstart As Long = 36 'Startzeile für Treffereinträge im Blatt Woche
Set wksSchicht = Worksheets("Schicht") 'Blatt mit Shcichtplan
Set wksAnwesend = Worksheets("Anwesend") 'Blatt mit Anwesenheitsliste
Set wksWoche = Worksheets("Woche") 'Zielblatt für Ergebnisliste
With wksWoche
'Alteinträge löschen (Zeile 100 ggf anpassen)
.Range(.Cells(Trefferstart, 3), .Cells(100, 3)).ClearContents
.Range(.Cells(Trefferstart, 5), .Cells(100, 5)).ClearContents
End With
'Startzeile für Treffereinträge im Ergebnisblatt
lngZeileTreffer = Trefferstart
lngZeileKeinTreffer = Trefferstart
iSecond = 3 'Spalte mit Namen in der Anwesenheitsliste
For Each rngZelle In wksSchicht.Range("A1:F100") 'Bereich ggf anpassen
If Not IsEmpty(rngZelle) Then
bln = False
iRowB = 2 'Startzeile mit Namen im Anwesenheitsliste
sTxtA = rngZelle.Value
Do Until IsEmpty(wksAnwesend.Cells(iRowB, iSecond))
sTxtB = wksAnwesend.Cells(iRowB, iSecond).Value
If Mid(sTxtA, 1, 8) = Mid(sTxtB, 1, 8) Then
'Treffer
bln = True
rngZelle.Interior.ColorIndex = FarbeTreffer
'Name in Spalte C eintragen
wksWoche.Cells(lngZeileTreffer, 3).Value = rngZelle.Value
lngZeileTreffer = lngZeileTreffer + 1
Exit Do
End If
iRowB = iRowB + 1
Loop
If bln = False Then
'Kein Treffer
rngZelle.Interior.ColorIndex = FarbeKeinTreffer
'Name in Spalte E
wksWoche.Cells(lngZeileKeinTreffer, 5).Value = rngZelle.Value
lngZeileKeinTreffer = lngZeileKeinTreffer + 1
End If
End If
Next rngZelle
'Namen sortieren
With wksWoche
If lngZeileTreffer - 1 > Trefferstart Then
With .Range(.Cells(Trefferstart, 3), .Cells(lngZeileTreffer - 1, 3))
.Sort Key1:=.Range("A1"), _
Order1:=xlAscending, _
Header:=xlNo
End With
End If
If lngZeileKeinTreffer - 1 > Trefferstart Then
With .Range(.Cells(Trefferstart, 5), .Cells(lngZeileKeinTreffer - 1, 5))
.Sort Key1:=.Range("A1"), _
Order1:=xlAscending, _
Header:=xlNo
End With
End If
End With
End Sub

Anzeige
AW: Strings vergleichen in 2 verschiedenen Tabellen
27.07.2009 13:24:48
Mario
....vielen Dank, werde es gleich mal ausprobieren....
AW: Strings vergleichen in 2 verschiedenen Tabellen
27.07.2009 16:10:35
Mario
Hallo Franz,
ein Problem habe ich noch nicht beschrieben:
In der Anwesenheitsliste sowie auch im Schichtplan sind Leerzellen, die einfach zu überspringen sind. Wie kann ich dies einarbeiten? Bei deiner Codierung setzt er ja die Schleife solange, bis eine Zelle leer ist.....
Tschau
Mario
AW: Strings vergleichen in 2 verschiedenen Tabellen
28.07.2009 01:22:14
fcs
Hallo Mario,
in diesem Fall ist dann eine For-Next-Schleife besser geeignet als Do-Loop.
Gruß
Franz
Sub Vergleichen()
Dim iSecond As Long
Dim iRowB As Long
Dim sTxtA As String, sTxtB As String
Dim bln As Boolean
Dim wksSchicht As Worksheet, wksAnwesend As Worksheet, rngZelle As Range
Dim wksWoche As Worksheet
Dim lngZeileTreffer As Long, lngZeileKeinTreffer As Long
Const FarbeKeinTreffer As Long = 6
Const FarbeTreffer As Long = 5
Const Trefferstart As Long = 36 'Startzeile für Treffereinträge im Blatt Woche
Set wksSchicht = Worksheets("Schicht") 'Blatt mit Shcichtplan
Set wksAnwesend = Worksheets("Anwesend") 'Blatt mit Anwesenheitsliste
Set wksWoche = Worksheets("Woche") 'Zielblatt für Ergebnisliste
With wksWoche
'Alteinträge löschen (Zeile 100 ggf anpassen)
.Range(.Cells(Trefferstart, 3), .Cells(100, 3)).ClearContents
.Range(.Cells(Trefferstart, 5), .Cells(100, 5)).ClearContents
End With
'Startzeile für Treffereinträge im Ergebnisblatt
lngZeileTreffer = Trefferstart
lngZeileKeinTreffer = Trefferstart
iSecond = 3 'Spalte mit Namen in der Anwesenheitsliste
For Each rngZelle In wksSchicht.Range("A1:F100") 'Bereich ggf anpassen
If Not IsEmpty(rngZelle) Then
bln = False
sTxtA = rngZelle.Value
With wksAnwesend
'Zeilen im Blatt Anwesend in Spalte iSecond abarbeiten
For iRowB = 2 To .Cells(.Rows.Count, iSecond).End(xlUp).Row
If IsEmpty(.Cells(iRowB, iSecond)) Then
'do nothing
Else
sTxtB = .Cells(iRowB, iSecond).Value
If Mid(sTxtA, 1, 8) = Mid(sTxtB, 1, 8) Then
'Treffer
bln = True
rngZelle.Interior.ColorIndex = FarbeTreffer
'Name in Spalte C eintragen
wksWoche.Cells(lngZeileTreffer, 3).Value = rngZelle.Value
lngZeileTreffer = lngZeileTreffer + 1
Exit For
End If
End If
Next
End With
If bln = False Then
'Kein Treffer
rngZelle.Interior.ColorIndex = FarbeKeinTreffer
'Name in Spalte E eintragen
wksWoche.Cells(lngZeileKeinTreffer, 5).Value = rngZelle.Value
lngZeileKeinTreffer = lngZeileKeinTreffer + 1
End If
End If
Next rngZelle
'Namen sortieren
With wksWoche
If lngZeileTreffer - 1 > Trefferstart Then
With .Range(.Cells(Trefferstart, 3), .Cells(lngZeileTreffer - 1, 3))
.Sort Key1:=.Range("A1"), _
Order1:=xlAscending, _
Header:=xlNo
End With
End If
If lngZeileKeinTreffer - 1 > Trefferstart Then
With .Range(.Cells(Trefferstart, 5), .Cells(lngZeileKeinTreffer - 1, 5))
.Sort Key1:=.Range("A1"), _
Order1:=xlAscending, _
Header:=xlNo
End With
End If
End With
End Sub

Anzeige
AW: Strings vergleichen in 2 verschiedenen Tabellen
28.07.2009 16:20:53
Mario
Hallo Franz,
vielen Dank erstmal für Deine Hilfe. Irgendwie klappt das noch nicht, ich habe mich bestimmt falsch ausgedrückt.
In der Tabelle "Anwesenheit" sind in Spalte C alle anwesenden Personen vom Tag. In der Tabelle "Woche" sind Mitarbeiter von B4 bis H50 wild verstreut, also viele Leerzellen zwischendrin. Nun sollen alle Mitarbeiter von "Woche" gelb markiert werden und in Spalte C ab Zeile 36 aufgelistet werden (verschoben, nicht kopiert), die auch in Tabelle "Anwesenheit" in Spalte C stehen. Alle anderen sollen blau markiert werden und in Spalte E ab Zeile 36 aufgelistet bzw. verschoben werden.
Zur Anschauung habe ich eine beispielhafte Datei mitgeschickt......hoffe, Du kannst was damit anfangen....

Die Datei https://www.herber.de/bbs/user/63494.xls wurde aus Datenschutzgründen gelöscht


Tschau
Mario
Anzeige
AW: Strings vergleichen in 2 verschiedenen Tabellen
29.07.2009 00:32:03
fcs
Hallo Mario,
ich hab mal das Makro so angepasst, dass jetzt eine Farbmarkierung erfolgt und die Namen unten gelistet und oben gelöscht werden.
Damit der Vergleich korrekt funktioniert, muss du darauf achten, dass die Namen in allen Tabellen identisch geschrieben werden. Zur Zeit gibt es einige Namen die unterschiedlich geschrieben werden; z.B.:
Grub-Papinczak Irena --- Grub Irena
Yildiz-Knobel Adelheid --- Yildiz-Knobel Heidi
https://www.herber.de/bbs/user/63500.xls
Gruß
Franz
AW: Strings vergleichen in 2 verschiedenen Tabellen
29.07.2009 10:28:50
Mario
Hallo Franz,
juhu, das wars.....vielen Dank nochmal.
Tschau
Mario
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige