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

Forumthread: Makro für SVERWEIS zw. 2 Tabellen

Makro für SVERWEIS zw. 2 Tabellen
15.10.2015 17:43:38
Henke
Liebe Mitglieder dieses Forums,
ich habe mich hier registriert, um endlich dieses nervige VBA-Problem vom Tisch zu bekommen, welches mir schon viel Zeit geraubt hat.
Vielleicht finde ich hier ja Hilfe.
Zur Sache:
Hier läuft ein Programm, welches Excel Listen generiert.
In dieser Listen stehen Personalnummern, Namen und Vornamen, sowie sich ändernde Zusatzinformationen, welche aber für die Problemlösung unberücktsichtigt bleiben können.
Der Aufbau der Listen ist zwar nicht statisch, aber die entscheidenen Spalten sind konstant (A=Personalnummer, B=Name, C= Vorname).
Die Zeilenposition kann sich unterscheiden (der erste Datensatz begint in Zeile 5 bis 10)
Einige dieser Namen werden aus datenschutzrechtlichen Gründen durch Falschnamen ersetzt. Um diese geht es bei meiner Anfrage.
Für bestimmte Auswertungen, soll ein Excel Makro erstellt werden, welches "auf Knopfdruck" die falschen Namen durch die Echtnamen ersetzt und die restlichen Namen unberücksichtigt lässt, da diese bereits stimmen.
In einer bereits vorhandenen Tabelle (schlüssel.xlsm), werden die Personalnummern und die echten Namen der in den Listen ausgegebenen Falschnamen gespeichert. (ebenfalls Spalte:(A=Personalnummer, B=Name, C= Vorname)
Das Makro müsste also nach dem Start in dem aktuell geöffeneten Tabellenblatt (dessen Name nicht immer gleich ist) in jedem Datensatz nach der Personalnummer aus Spalte A in der "Schlüssel"tabelle in Spalte A suchen.
Wenn eine identische Personalnummer gefunden wird, sollen die Spalten B und C durch die Werte in der Schlüsseltabelle (ebenfalls B und C) ersetzt werden.
Folgendes Script vergleicht die Tabellenblätter "Schlüssel" und "Mitarbeiter" in einer Tabelle und ersetzt die Namen wie gewollt. Das funktioniert soweit. Aber wie überrede ich VBA dazu, in einer anderen Datei, welche möglichst nur verdeckt geöffnet wird, nach der Personalnummer zu suchen und die falschen Namen in der aktuellen Tabelle durch Knopfdruck zu ersetzen?
Sub NameErsetzen()
Dim wksS As Worksheet, wksT As Worksheet
Dim vRow As Variant
Dim iRow As Integer
Set wksS = Worksheets("Schlüssel")
Set wksT = Worksheets("Mitarbeiter")
For iRow = 1 To WorksheetFunction.CountA(wksS.Columns(1))
vRow = Application.Match(wksS.Cells(iRow, 1).Value, wksT.Columns(1), 0)
If Not IsError(vRow) Then
wksT.Cells(vRow, 2).Value = wksS.Cells(iRow, 2).Value
wksT.Cells(vRow, 3).Value = wksS.Cells(iRow, 3).Value
End If
Next iRow
wksT.Select
End Sub

Ich bin für jeden Hinweis sehr dankbar.
LG
Henke

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro für SVERWEIS zw. 2 Tabellen
16.10.2015 10:37:05
ChrisL
Hi Henke
Sub NameErsetzen()
Dim WB1 As Workbook
Dim wksS As Worksheet, wksT As Worksheet
Dim vRow As Variant
Dim iRow As Integer
Application.ScreenUpdating = False
Set wksT = ThisWorkbook.ActiveSheet
Set WB1 = Workbooks.Open("C:\Pfad\schlüssel.xlsm")
Set wksS = WB1.Worksheets("Schlüssel")
For iRow = 1 To WorksheetFunction.CountA(wksS.Columns(1))
vRow = Application.Match(wksS.Cells(iRow, 1).Value, wksT.Columns(1), 0)
If Not IsError(vRow) Then
wksT.Cells(vRow, 2).Value = wksS.Cells(iRow, 2).Value
wksT.Cells(vRow, 3).Value = wksS.Cells(iRow, 3).Value
End If
Next iRow
WB1.Close
Application.ScreenUpdating = True
End Sub

cu
Chris

Anzeige
AW: Makro für SVERWEIS zw. 2 Tabellen
16.10.2015 17:11:33
Henke
Hallo Chris,
du hast mich mit deinem Beitrag ein ganzes Stück nach vorn gebracht. Ich musste nur noch "Set wksT = ThisWorkbook.ActiveSheet" durch "Set wksT = ActiveWorkbook.ActiveSheet" ersetzen und schon hat's funktioniert. Ich danke dir für deine schnelle und zielführende Idee. Nun muss ich nur noch herausfinden, wie sich die Datei (aus der ich das Makro ausführen lasse) automatisch nach dessen Abarbeitung schließt. Aber das erst nach dem Urlaub.
Tschüss
Henke
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro für SVERWEIS zwischen 2 Tabellen


Schritt-für-Schritt-Anleitung

Um ein Makro zu erstellen, das den SVERWEIS zwischen zwei Tabellen durchführt, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Rechtsklicke auf VBAProject (DeineDatei.xlsm) und wähle Einfügen > Modul.

  3. Code eingeben: Kopiere folgenden Code in das Modul:

    Sub NameErsetzen()
       Dim WB1 As Workbook
       Dim wksS As Worksheet, wksT As Worksheet
       Dim vRow As Variant
       Dim iRow As Integer
    
       Application.ScreenUpdating = False
       Set wksT = ThisWorkbook.ActiveSheet
       Set WB1 = Workbooks.Open("C:\Pfad\schlüssel.xlsm")
       Set wksS = WB1.Worksheets("Schlüssel")
    
       For iRow = 1 To WorksheetFunction.CountA(wksS.Columns(1))
           vRow = Application.Match(wksS.Cells(iRow, 1).Value, wksT.Columns(1), 0)
           If Not IsError(vRow) Then
               wksT.Cells(vRow, 2).Value = wksS.Cells(iRow, 2).Value
               wksT.Cells(vRow, 3).Value = wksS.Cells(iRow, 3).Value
           End If
       Next iRow
    
       WB1.Close
       Application.ScreenUpdating = True
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros > NameErsetzen aus.


Häufige Fehler und Lösungen

  • Fehler: Datei nicht gefunden
    Lösung: Stelle sicher, dass der Pfad zur Datei schlüssel.xlsm korrekt ist.

  • Fehler: Keine Übereinstimmung gefunden
    Lösung: Überprüfe, ob die Personalnummern in beiden Tabellen identisch sind.

  • Fehler beim Öffnen des Arbeitsblatts
    Lösung: Stelle sicher, dass das Arbeitsblatt, in dem du arbeitest, aktiv ist.


Alternative Methoden

Wenn du kein VBA verwenden möchtest, kannst du auch die Funktionen SVERWEIS oder INDEX und VERGLEICH direkt in Excel nutzen. Hier ein einfaches Beispiel für SVERWEIS:

=SVERWEIS(A2; 'Schlüssel'!A:C; 2; FALSCH)

Dies sucht den Wert in Zelle A2 in der Tabelle "Schlüssel" und gibt den entsprechenden Namen zurück.


Praktische Beispiele

Hier ein Beispiel, wie du den SVERWEIS in einer Excel-Tabelle verwenden kannst:

  1. Tabelle "Mitarbeiter": Enthält Personalnummern in Spalte A.
  2. Tabelle "Schlüssel": Enthält Personalnummern in Spalte A, Namen in Spalte B.

Um Namen aus der Tabelle "Schlüssel" zu den Personalnummern in "Mitarbeiter" zuzuordnen, könntest du folgende Formel in Spalte B der "Mitarbeiter"-Tabelle verwenden:

=SVERWEIS(A2; Schlüssel!A:B; 2; FALSCH)

Tipps für Profis

  • Nutze Fehlerüberprüfung: Implementiere If Not IsError(...) in deinem VBA-Code, um Fehler beim SVERWEIS abzufangen.

  • Automatisches Schließen von Dateien: Füge am Ende deines Makros eine Zeile ein, um die Datei automatisch zu schließen, sobald der SVERWEIS abgeschlossen ist.

  • Optimierung: Deaktiviere die Bildschirmaktualisierung mit Application.ScreenUpdating = False, um die Ausführungsgeschwindigkeit des Makros zu erhöhen.


FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um weitere Spalten zu ersetzen?
Du kannst die Zeilen im Code einfach kopieren und anpassen, um zusätzliche Spalten zu ersetzen, indem du die Indizes in Cells(vRow, x) änderst.

2. Was mache ich, wenn ich nicht auf die Datei zugreifen kann?
Überprüfe die Berechtigungen für den Ordner, in dem die Datei gespeichert ist, und stelle sicher, dass die Datei nicht bereits geöffnet ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige