Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Tabellenblätter vergleich !





Frage

Hallo Kann mir jemand helfen ! Ich habe mehrere Tabellenblätter immer im gleichen Schema Spalte A Name Spalte B Adresse Spalte C Geburtsdatum Spalte D Spalte E usw. Ich bräuchte jetzt eine Möglichkeit Um diese Tabellenblätter zu Vergleichen und alle doppelten Namen aus den Spalten A aus allen Tabellenblätter zu filtern und dann die dazugehörigen Daten aus den anderen Spalten. Mit Pivot funktioniert das nicht da die Daten zu viel sind. Ich hab mir zwar schon einen Filtermakro umgebastelt aber das funktioniert nur wenn ich immer einen Namen eingebe. ich würde das ganze aber gern in einem Aufwasch machen. Daten in ein Tabellenblatt zu kopiern geht Auch nicht zu viele Daten. Also wer kann mir mit einem Makro oder eine andere Lösung helfen. Übrigens Acess wäre zu umständlich habe ich mir auch schon überlegt, die Daten ändern sich zu oft, und ich kenn mich auch zu wenig damit aus. Danke für eure Hilfe schon mal im voraus. LG Peter Kaufmann

Antwort 1 von coros

Moin Peter,

ich hätte da eine VBA Lösung. Nachfolgenden Code kopiere bitte in ein Standardmodul.

Sub VergleichenUndKopieren()
'Spalten in zwei Tabellen vergleichen und bei Übereinstimmung
'Daten in ein neues Tabellenblatt kopieren
Dim Sheet1 As Worksheet, Sheet2 As Worksheet, NewSheet As String, _
FundSheet1 As Range, FundSheet2 As Range, Suchbegriff As String, _
Zeile As Long

Zeile = 1
NewSheet = "Auswertung vom " & Format(Now, "dd.mm.yy hh-mm")
On Error GoTo ERRORH
Set Sheet1 = Sheets("Tabelle1")      'Name des Tabellenblattes in wbkO
Set Sheet2 = Sheets("Tabelle2")      'Name des Tabellenblattes in wbkV
   With Application
   .ScreenUpdating = False
   .StatusBar = "Vergleich läuft! Bitte warten......"
   End With
   With Sheets.Add                   'Neues Tabellenblatt anlegen
   
   .Name = NewSheet
   End With
For Each FundSheet1 In Sheet1.Range("A1:A1000")  'Bereich in Sheet1 der
                                                'Verglichen werden soll
   Suchbegriff = FundSheet1    'aktuelle Zelle als Suchbegriff festlegen
   Set FundSheet2 = Sheet2.Range("A1:A1000").Find(What:=Suchbegriff, _
   LookIn:=xlValues, LookAt:=xlWhole)
   'Bereich in Sheet2 der durchsucht werden soll
      If Not FundSheet2 Is Nothing Then 'wenn Suchbegriff nicht
                                        'gefunden dann Zeile kopieren
   FundSheet1.EntireRow.Copy Sheets(NewSheet).Cells(Zeile, 1)
   Zeile = Zeile + 1
   End If
Next
With Application
.ScreenUpdating = True
.StatusBar = False
End With
Sheets(NewSheet).Activate
Exit Sub


Bei diesem Code werden 2 Blätter auf doppelt vorkommende Einträge in Spalte A verglichen. Werden Übereinstimmungen gefunden, wird die gesamte Zeile in ein neu angelegtes Tabellenblatt, welches den Namen "Auswertung" gefolgt von aktuellem Datum und aktueller Uhrzeit erhält, kopiert.
Da Du nur von mehreren Blättern sprichst, aber keine genaue Anzahl geschrieben hast, bin ich erst einmal von der einfachsten Variante, sprich von zwei Tabellenblättern, ausgegangen.

Da ich nicht weiß, ob Du Dich mit VBA (Visual Basic) auskennst, kommt hier eine kurze Anweisung, wie Du den Code in Deine Tabelle bekommst.

1. Markiere die Anweisung aus diesem Beitrag und Kopiere (Strg c) diesen.

2. Klicke in Deiner Exceldatei in der Menüleiste nacheinander auf Extras => Makro => Visual Basic Editor oder drücke die Tastenkombination Alt F11

3. In dem neu geöffneten Fenster suche auf der linken Seite nach dem Eintrag VBA Projekt(Hier der Name Deiner Tabelle) und klicke doppelt auf diesen Eintrag

4. Klicke danach nacheinander in der Menüleiste auf Einfügen => Modul.

5. Füge nun die vorher kopierte Anweisung in das rechte leere Fenster ein.

Damit das Makro aufgerufen werden kann, benötigst Du eine Schaltfläche. Da ich nicht weiß, ob Du weißt, wie man eine Befehlsschaltfläche in ein Tabellenblatt einfügst, kommt hier eine kurze Anweisung.

1. Gehe in der Menüleiste auf Ansicht => Symbolleiste => Steuerelement-Toolbox

2. Klicke auf die 6.Schaltfläche von links (Schaltflächenkommentar: Befehlsschaltfläche)

3. Positioniere die Schaltfläche in Deinem Tabellenblatt und passe gegebenenfalls die Größe an.

4. Klicke in der Symbolleiste auf die 3.Schaltfläche von links (Schaltflächenkommentar: Code anzeigen).

5. In das geöffnete Fenster schreibst Du zwischen die Texte “Private Sub CommandButton1_Click()“ und “End Sub“ in die Leerzeile Call Makroname oder nur der Makroname.

6. Klicke in der Symbolleiste auf die erste Schaltfläche von links um den Entwurfmodus zu beenden (Schaltflächenkommentar: Entwurfmodus beenden).

Wenn Du alles richtig gemacht hast, sollte das Makro, nachdem Du die Schaltfläche betätigt hast, abgearbeitet werden.

Du solltest zum Abschluss noch die Sicherheitseinstellung, die beim Öffnen der Datei abgefragt wird, kontrollieren. Klicke dazu nacheinander in der Menüleiste wieder auf Extras => Makro und dann auf Sicherheit.... Gehe, falls nicht schon angezeigt, auf die Registerkarte Sicherheitsstufe und schaue dort nach, ob die Einstellung Mittel aktiviert ist. Wenn nicht, aktiviere diese Einstellung, da sonst der Code nicht ausgeführt werden kann. Beim nächsten Öffnen Deiner Datei kommt eine Abfrage, ob Makros aktiviert oder deaktiviert werden sollen. Klicke auf aktivieren und der Code wird ausgeführt.

Ich hoffe, das Makro hilft Dir erst einmal etwas weiter. Auch hoffe ich, dass Du mit der Anleitung klar kommst. Wenn Fragen auftauchen sollten oder es Probleme gibt, dann melde Dich wieder.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Peter Kaufmann

Hallo Coros!

Die Lösung ist suuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuper
bin ganz hin und weg.

zum Detail:

es wäre super wenn das Makro alle vorhandenen Tabellenblätter berücksichtigen würde.

Hintergrund:

Es Handelt sich um Rangisten verschiedener Länder(alle gleich aufgebaut).

Da es aber z.B. Müller Heinz in Österreich in Deutschland in der Schweiz usw. gibt. habe ich bisher immer den einzelnen Namen abfragen müssen, um dann den Namen in meiner Datenbank mit einem Kürzel für das jeweilige Land zu versehen um sie unterscheiden zu können.

Mit deinem SUUUUUUUUUUUUUUUUUUUUUUUUUUper Makro habe ich nun die Möglichkeit mir alle Ranglisten in ein Datei zu holen, dann das Makro laufen zu lasssen und ich habe ganz einfach alle namen die in den einzelen Tabellenblätter mehrfach vorkommen, dann brauch ich nur noch diese wesentlich kleinere Liste in meiner Datenbank abarbeiten um die Spieler genau unterscheiden zu können (es Handelt scih dabei um eine Schachdatenbank).

Wenn du mir also nocheinmal helfen würdest wäre echt SUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUper

vielen Dank im Voraus

LG
Peter

Antwort 3 von coros

Moin Peter,

sorry, dass ich mich erst heute morgen wieder melde, aber gestern war ich den ganzen Tag unterwegs und somit habe ich Deine Anfrage erst heute Morgen gelesen. Warum schreibst Du nicht, um wieviele Tabellenblätter es sich handelt? Ist das ein Geheimnis. Wenn ich die wüßte, hätte ich Dir sicherlich ein Makro auf die Gesamtzahl der Tabellenblätter schreiben können. So aber habe ich das Makro um nur eine zu durchsuchende Tabelle erweitert.

Sub VergleichenUndKopieren()
'Spalten in zwei Tabellen vergleichen und bei Übereinstimmung
'Daten in ein neues Tabellenblatt kopieren
Dim Sheet1 As Worksheet, Sheet2 As Worksheet, Sheet3 As Worksheet, _
NewSheet As String, FundSheet1 As Range, FundSheet2 As Range, _
FundSheet3 As Range, Suchbegriff As String, Zeile As Long

Zeile = 1
NewSheet = "Auswertung vom " & Format(Now, "dd.mm.yy hh-mm")
On Error GoTo ERRORH
Set Sheet1 = Sheets("Tabelle1")      'Name des Tabellenblattes in Sheet1
Set Sheet2 = Sheets("Tabelle2")      'Name des Tabellenblattes in Sheet2
Set Sheet3 = Sheets("Tabelle3")      'Name des Tabellenblattes in Sheet3
   With Application
   .ScreenUpdating = False
   .StatusBar = "Vergleich läuft! Bitte warten......"
   End With
   With Sheets.Add                   'Neues Tabellenblatt anlegen
   
   .Name = NewSheet
   End With
For Each FundSheet1 In Sheet1.Range("A1:A1000")  'Bereich in Sheet1 der
                                                'Verglichen werden soll
   Suchbegriff = FundSheet1    'aktuelle Zelle als Suchbegriff festlegen
   'Bereich in Sheet2 und Sheet3 der durchsucht werden soll
   Set FundSheet2 = Sheet2.Range("A1:A1000").Find(What:=Suchbegriff, _
   LookIn:=xlValues, LookAt:=xlWhole)
   Set FundSheet3 = Sheet3.Range("A1:A1000").Find(What:=Suchbegriff, _
   LookIn:=xlValues, LookAt:=xlWhole)
   'wenn Suchbegriff nicht gefunden dann ...
      If Not FundSheet2 Is Nothing And Not FundSheet3 Is Nothing Then
   'Zeile kopieren
   FundSheet1.EntireRow.Copy Sheets(NewSheet).Cells(Zeile, 1)
   Zeile = Zeile + 1
   End If
Next
With Application
.ScreenUpdating = True
.StatusBar = False
End With
Sheets(NewSheet).Activate
Exit Sub
ERRORH:
MsgBox "Es ist ein Fehler aufgetreten!", vbOKOnly + vbExclamation, "Fehler"
   With Application
   .ScreenUpdating = True
   .StatusBar = False
   End With
End Sub


Wenn Du noch mehr Tabellenblätter hast, musst Du den Code anpassen. Dazu musst Du in der Zeile hinter der Typenzuweisung

Zeile As Long

ein Komma setzen und dann ein Leerzeichen (ganz wichtig). Dann schreibst Du

Sheet4 As Worksheet, FundSheet3 As Range

dorthin. Danach gehe in die Zeile mit der Anweisung

Set Sheet3 = Sheets("Tabelle3")

und drücke einaml die Returntaste. In die dadurch entstandene Leerzeile kopierst Du dann die Anweisung

Set Sheet4 = Sheets("Tabelle4")

Danach suche die Zeile

Set FundSheet3 = Sheet2.Range("A1:A1000").Find(What:=Suchbegriff, _
LookIn:=xlValues, LookAt:=xlWhole)

und betätige wieder die Returntaste. In die Leerzeile kopierst Du dann

Set FundSheet4 = Sheet4.Range("A1:A1000").Find(What:=Suchbegriff, _
LookIn:=xlValues, LookAt:=xlWhole)

Zum Schluss musst Du dann noch die Zeile

If Not FundSheet2 Is Nothing And Not FundSheet3 Is Nothing Then

um den Eintrag

And Not FundSheet4 Is Nothing

erweitern. Dieser Eintrag muss zwischen dem letzten Nothing und dem Then eingefügt werden.

So, ich hoffe, ich habe nichts vergessen. Wenn doch, melde Dich noch mal. Natürlich kannst Du Dich auch bei dadurch ergebenden Fragen melden.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 4 von Peter Kaufmann

Vielen Dank

Werde Versuchen das makro zu erweitern.

deine Erklärungen sind ja toll und ich hoffe das ich sie auch umsetzen kann.

Übrigens es ist kein geheimnis wegen der Tabellen zu r Zeit sind es 5 aber es können auch noch mehr werden es kommt darauf an wie lange das vergleichen dann immer dauert und wieviele länder tabellen wirklich sinn machen für die Datenbank.
Da bin ich selbst noch nicht klug genug, darum war meine frage auch ob man das makro nicht auf alle sheets unabhäging von der anzahl schreiben kann denn dann wäre egal wieviele tabellen ich dann auch immer zum vergleichen nehme.

Vorerst mal einen riesigen Dank an DIch für deine so rasche hilfe und vorallem für das tolle Makro.

Werde versuchen dein Makro zu erweitern, mal sehen ob ich das ganze durschaue, sonst hoffe ich das ich mich noch mal melden darf.


Vielen dank nochmal

lg

Peter

Antwort 5 von Peter Kaufmann

Hallo Coros!

Bin leider schon wieder da, habe das Makro umgebaut laut deiner Anleitung ja ein klaks!!!!!!! nur leider funktionierts nicht!!( mein fehler).

Da kommt davon wenn man sich nicht auskennt.;-)

folgendes Problem das Makro findet alle daten die in allen 5 tabellen gleich sind und da liegt der Hacken, denn damit schliesst das Makro die daten aus die nur in tabelle 1 und 2 gleich sind oder die nur in 2 und 4 gleich sind.

Kommt damit zustande das
Tabellenblatt 1 Namen von Deutschland von A-R
Tabellenblatt 2 Namen von Deutschland von S-Z
Tabellenblatt 3 Namen von Schweiz und
Tabellenblatt 4 Namen von Österreich

beinhalten, beim Vergleich vergleciht das Marko welche Namen in allen tabellenblätter vorhanden sind, gibt mir aber nicht zurück welche Namen in allen Tabellen blätter mehrfach vorkommen also zb

Müller in 1 und 2 und 3 Maier aber nur in 3 und 4

Das wäre das Problem,

Das wird dann wohl zu komliziert oder.

weil sonst vergleiche ich einfach mit deinem 1 marko die Tabellen einzeln und kopier mir die Ergebnisse dann einfach zusammen und filter sie dann einfach.

Natürlich wäre mir eine Markolösung lieber, da es sich dabei um 310.000 daten handelt wäre eine Makrolösung der Wahnsinn.

Du wirst jetzt sagen, wenn ich das gleich gesagt hätte hättest du dir eine Menge arbeit erspart stimmt aber ich als unwissendeer der nur weis was er bracuht aber nicht weis wie man es macht und was es für auswirkungen hat bittet hier um Absolution.


Danke für deine hilfe.

lg
Peter Kaufmann

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: