Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zellen vergleichen, wenn gleich dann kopieren

Zellen vergleichen, wenn gleich dann kopieren
28.05.2017 18:34:54
Mooslechner
Hallo,
wieder mal sitz ich und versuche eine Lösung mit VBA zu finden
Tab = Abkürzung für Tabellenblatt
Problem: (finden gleicher Zellinhalts in beiden Tab, kopieren aus Tab Bibliothek nach Tab Station 000.
In der Excelmappe befinden sich 2 Tabellenblätter (Bibliothek und Station 000)
Möchte:
Tabellenblatt Station 000: befinden sich in der gleichen Zeile Spalte B Nummer und Spalte D Name.
Nehme Inhalt Zelle B2 und D2 aus Tab Station 000 und duchlaufe das Tab Bibliothek (selbe Spalten bis nach unten)
Bei Treffer kopiere von der gefundenen Zeile Inhalt der Zelle E bis K in Tab Station 000
Dann nächste Zeile in Tab Station 000 Zelle B3 und D3 und suchen in Tab Bibliothek, bis alle Zeilen in Tab Station 000 durch sind.
Normal sind es ca. 200 Zeilen die ich regelmäßig mit der Bibliothek vergleiche.
Ich weiß es geht auch mit S-Verweis, doch bin ich von VBA fasziniert.
Lieber Excelexperte, vielen Dank für die Mühe. Meine Theorie:
Sub_vergleichen()
Dim LoLetzteB as Integer, LoLetzteSt as Integer
Dim I as Integer
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Sheets("Bibliothek").Select
'ermittelt die letzte Zeile
loLetzteB = .Cells(.Rows.Count, 2).End(xlUp).Row
Sheets("Station 000").Select
loLetzteSt = .Cells(.Rows.Count, 2).End(xlUp).Row
If Worksheets("Station 000").Cells(I, B) & .Cells(I, D)= Worksheets("Bibliothek").Cells(I, B) & .Cells(I, D) Then
'kopiere bei Treffer Inhalt nach Zelle E bis K aus Bibliothek und füge in Tab Station 000 ein.
Next I
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen vergleichen, wenn gleich dann kopieren
28.05.2017 18:58:12
Sepp
Hallo Mooslechner,
ungetestet.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub vergleichen()
Dim varStation As Variant, varRet As Variant
Dim lngI As Long, lngN As Long

On Error GoTo ErrorHandler

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .Calculation = xlManual
End With

With Sheets("Station 000")
  varStation = .Range("B2:C" & Application.Max(2, .Cells(.Rows.Count, 2).End(xlUp).Row))
  For lngI = 1 To UBound(varStation, 1)
    varRet = Application.Match(varStation(lngI, 1), Sheets("Bibliothek").Columns(2), 0)
    If IsNumeric(varRet) Then
      If varStation(lngI, 2) = Sheets("Bibliothek").Cells(varRet, 3) Then
        .Range(.Cells(lngI + 1, 3), .Cells(lngI + 1, 10)).Copy Sheets("Bibliothek").Cells(varRet, 3)
      End If
    End If
  Next
End With

ErrorHandler:

With Err
  If .Number <> 0 Then
    MsgBox "Fehler in Prozedur:" & vbTab & "'vergleichen'" & vbLf & String(25, Chr(151)) & _
      vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
      "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
      .Description & vbLf & vbLf & String(25, Chr(151)), 81968, _
      "VBA - Fehler in Prozedur - vergleichen", .HelpFile, .HelpContext
    .Clear
  End If
End With

On Error GoTo 0

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = xlAutomatic
End With

End Sub

Gruß Sepp

Anzeige
Fehler!
28.05.2017 19:01:49
Sepp
Hallo nochmal,
diese Zeile muss so lauten!
.Range(.Cells(lngI + 1, 4), .Cells(lngI + 1, 11)).Copy Sheets("Bibliothek").Cells(varRet, 4)

Gruß Sepp

Anzeige
AW: Zellen vergleichen, wenn gleich dann kopieren
30.05.2017 21:49:09
Mooslechner
Hallo Sepp,
vielen Dank schon mal, wird am Wochenende getestet.
vg M.
AW: Zellen vergleichen, wenn gleich dann kopieren
05.06.2017 11:39:19
Mooslechner
Hallo Sepp,
jetzt hatte ich endlich Zeit.
Code hat Fehler:
Meldung:
Fehler in Prozedur
"vergleichen"
Fehlernummer 13
Beschreibung: Typen unverträglich
Vielen Dank für Deine Mühe
Code:
Option Explicit
Sub vergleichen()
Dim varStation As Variant, varRet As Variant
Dim lngI As Long, lngN As Long
On Error GoTo ErrorHandler
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlManual
End With
With Sheets("Station 000")
varStation = .Range("B2:C" & Application.Max(2, .Cells(.Rows.Count, 2).End(xlUp).Row))
Debug.Print varStation
For lngI = 1 To UBound(varStation, 1)
varRet = Application.Match(varStation(lngI, 1), Sheets("Bibliothek").Columns(2), 0)
If IsNumeric(varRet) Then
If varStation(lngI, 2) = Sheets("Bibliothek").Cells(varRet, 3) Then
'        .Range(.Cells(lngI + 1, 3), .Cells(lngI + 1, 10)).Copy Sheets("Bibliothek").Cells( _
varRet, 3)
.Range(.Cells(lngI + 1, 4), .Cells(lngI + 1, 11)).Copy Sheets("Bibliothek").Cells( _
varRet, 4)
End If
End If
Next
End With
ErrorHandler:
With Err
If .Number  0 Then
MsgBox "Fehler in Prozedur:" & vbTab & "'vergleichen'" & vbLf & String(25, Chr(151)) & _
vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
"Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
.Description & vbLf & vbLf & String(25, Chr(151)), 81968, _
"VBA - Fehler in Prozedur - vergleichen", .HelpFile, .HelpContext
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlAutomatic
End With
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

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

Zellen vergleichen und bei Übereinstimmung kopieren


Schritt-für-Schritt-Anleitung

Um in Excel Zellen zu vergleichen und bei Übereinstimmung Inhalte zu kopieren, kannst Du den folgenden VBA-Code verwenden. Dieser Code sucht in zwei Tabellenblättern nach übereinstimmenden Werten und kopiert die entsprechenden Zeileninhalte.

  1. Öffne die Excel-Datei mit den beiden Tabellenblättern „Bibliothek“ und „Station 000“.

  2. Drücke Alt + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste im Projektfenster auf „VBAProject (DeineDatei.xlsx)“.
    • Wähle „Einfügen“ > „Modul“.
  4. Kopiere den folgenden VBA-Code in das neue Modul:

    Sub vergleichen()
       Dim varStation As Variant, varRet As Variant
       Dim lngI As Long
       On Error GoTo ErrorHandler
       With Application
           .ScreenUpdating = False
           .EnableEvents = False
           .Calculation = xlManual
       End With
       With Sheets("Station 000")
           varStation = .Range("B2:C" & Application.Max(2, .Cells(.Rows.Count, 2).End(xlUp).Row))
           For lngI = 1 To UBound(varStation, 1)
               varRet = Application.Match(varStation(lngI, 1), Sheets("Bibliothek").Columns(2), 0)
               If IsNumeric(varRet) Then
                   If varStation(lngI, 2) = Sheets("Bibliothek").Cells(varRet, 3) Then
                       .Range(.Cells(lngI + 1, 4), .Cells(lngI + 1, 11)).Copy Sheets("Bibliothek").Cells(varRet, 4)
                   End If
               End If
           Next
       End With
    ErrorHandler:
       With Err
           If .Number <> 0 Then
               MsgBox "Fehler in Prozedur: 'vergleichen'. Fehlernummer: " & .Number & " Beschreibung: " & .Description
           End If
       End With
       With Application
           .ScreenUpdating = True
           .EnableEvents = True
           .Calculation = xlAutomatic
       End With
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Starte das Makro:

    • Drücke Alt + F8, wähle „vergleichen“ und klicke auf „Ausführen“.

Häufige Fehler und Lösungen

  • Fehler in Prozedur:

    • Wenn Du die Meldung „Fehler in Prozedur: 'vergleichen'“ erhältst, könnte dies auf einen Typfehler hinweisen. Überprüfe die Zellenformate in beiden Tabellenblättern.
  • Typen unverträglich:

    • Dieser Fehler tritt auf, wenn die Daten in den Zellen nicht kompatibel sind. Achte darauf, dass die verglichenen Zellen den gleichen Datentyp haben (z.B. beide als Text oder beide als Zahl).

Alternative Methoden

Wenn Du nicht mit VBA arbeiten möchtest, kannst Du auch die SVERWEIS-Funktion verwenden, um Zellen zu vergleichen und Inhalte zu kopieren. Hier ist ein einfaches Beispiel:

  1. Gehe zu „Station 000“ und wähle Zelle E2.

  2. Gib die folgende Formel ein:

    =WENN(ISTFEHLER(SVERWEIS(B2;Bibliothek!B:C;2;FALSCH));"";SVERWEIS(B2;Bibliothek!B:C;2;FALSCH))
  3. Ziehe die Formel nach unten, um sie auf die anderen Zeilen anzuwenden.


Praktische Beispiele

Angenommen, Du hast in „Station 000“ in Spalte B Produktnummern und in Spalte D die Produktnamen. In „Bibliothek“ sind die entsprechenden Informationen in den Spalten B (Nummer) und C (Name) sowie E bis K (weitere Informationen) gespeichert. Der oben gezeigte VBA-Code sucht nach Übereinstimmungen und kopiert die Daten von „Bibliothek“ nach „Station 000“, wenn die Bedingungen erfüllt sind.


Tipps für Profis

  • Debugging: Nutze Debug.Print im Code, um die Werte von Variablen während der Ausführung zu überprüfen.
  • Optimierung: Aktiviere ScreenUpdating und EnableEvents nur, wenn nötig, um die Performance zu steigern.
  • Verwendung von Arrays: Arbeite mit Arrays, um die Verarbeitungsgeschwindigkeit zu erhöhen, besonders bei großen Datenmengen.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um andere Spalten zu vergleichen?
Du kannst die Spaltenreferenzen im Code ändern, um andere Spalten zu vergleichen und zu kopieren, indem Du die Zahlen in .Cells(lngI + 1, X) anpasst.

2. Funktioniert dieser Code in jeder Excel-Version?
Ja, der Code sollte in allen modernen Excel-Versionen funktionieren, die VBA unterstützen, wie Excel 2010, 2013, 2016, 2019 und Microsoft 365.

3. Kann ich den Code für mehr als zwei Tabellenblätter verwenden?
Ja, Du kannst den Code erweitern, um zusätzliche Tabellenblätter hinzuzufügen, indem Du weitere Sheets()-Referenzen und Schleifen implementierst.

4. Was tun, wenn es keine Übereinstimmungen gibt?
Der Code ist so eingerichtet, dass er keine Aktion ausführt, wenn keine Übereinstimmungen gefunden werden. Du kannst eine Nachricht hinzufügen, die Du bei fehlenden Übereinstimmungen anzeigen möchtest.

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