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

Forumthread: Spalten vergleichen und doppelte markieren

Spalten vergleichen und doppelte markieren
08.10.2017 11:32:49
parza
Halllo zusammen,
vor einiger Zeit hat mir das Forum sehr hilfreich bei der unten stehen Programmierung super geholfen.
Ziel ist, dass alle Daten in einer Datei, die aus mehreren Registerkarten besteht, jeweils in Spalte "M" (also 13) miteinander verglichen und doppelte Daten rot markiert werden sollen.
Nun zum Problem: Da sich die Datei geändert hat, zwei Spalten weniger, war die ursprüngliche Programmierung auf "O" (15) ausgelegt und hat wunderbar funktioniert.
Habe ich beim Ändern auf "M" und die 13 eventuell irgendetwas übersehen? Bin Programmierlaie.
Vielen Dank, parza
Nun der Code:
Dim strVergleich As String
Dim intActiveSheet As Integer
Dim intAnzahl As Integer
Dim lngLast As Long
Dim i As Long
Dim x As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
'Vergleichen und farbig stellen
With ThisWorkbook
For intAnzahl = 1 To .Worksheets.Count
lngLast = .Worksheets(intAnzahl).Cells(Rows.Count, 13).End(xlUp).Row
For intActiveSheet = 1 To .Worksheets.Count
If intActiveSheet intAnzahl Then
For i = 1 To lngLast
If .Worksheets(intAnzahl).Cells(i, 13).Value "" Then
strVergleich = .Worksheets(intAnzahl).Cells(i, 13).Value
For x = 1 To Worksheets(intActiveSheet).Cells(Rows.Count, 13).End(xlUp).Row
If strVergleich = Worksheets(intActiveSheet).Range("M" & x).Value Then
.Worksheets(intAnzahl).Cells(i, 13).Font.Color = vbRed
GoTo ENDE
End If
Next x
End If
ENDE:
Next i
End If
Next intActiveSheet
Next intAnzahl
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten vergleichen und doppelte markieren
08.10.2017 12:08:31
Sepp
Hallo parza,
ohne jetzt auf den anderen Code einzugehen, würde ich es so lösen.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub vergleich()
Dim objWS As Worksheet, objAllWS As Worksheet
Dim objColor As Range, objFind As Range, objValue As Range, objCell As Range

Const lngColumn As Long = 13

On Error GoTo ErrorHandler

For Each objAllWS In ThisWorkbook.Worksheets
  Set objValue = objAllWS.Columns(lngColumn).SpecialCells(xlCellTypeConstants)
  For Each objWS In ThisWorkbook.Worksheets
    If Not objWS Is objAllWS Then
      Set objColor = Nothing
      For Each objCell In objValue
        Set objFind = objWS.Columns(lngColumn).Find(what:=objCell.Value, LookIn:=xlValues, _
          Lookat:=xlWhole, MatchCase:=False, SearchFormat:=False)
        If Not objFind Is Nothing Then
          If objColor Is Nothing Then
            Set objColor = objFind
          Else
            Set objColor = Union(objColor, objFind)
          End If
        End If
      Next
      If Not objColor Is Nothing Then objColor.Font.Color = vbRed
    End If
  Next
Next

ErrorHandler:

If Err.Number <> 0 Then
  MsgBox "Fehler in Modul2" & vbLf & vbLf & "Prozedur:" & vbTab & "vergleich" & vbLf & _
    "Nummer:" & vbTab & Err.Number & vbLf & "Meldung:" & vbTab & Err.Description & vbLf & _
    IIf(Erl, "Zeile:" & vbTab & Erl, ""), vbExclamation, "Fehler!"
  Err.Clear
End If

Set objAllWS = Nothing
Set objWS = Nothing
Set objColor = Nothing
Set objCell = Nothing
Set objValue = Nothing
Set objFind = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Spalten vergleichen und doppelte markieren
08.10.2017 12:45:16
parza
Sepp,
vielen Dank. Ich glaube, es funktioniert perfekt. Finaler Test morgen in der Arbeit.
Noch zwei Fragen: Falls sich die Spalten wieder ändern sollten, ist die "13" entsprechend zu ändern?
Und es kommt folgende Meldung:
Fehler in Modul 2
Prozedur: vergleich
Nummer: 1004
Meldung: Keine Zellen gefunden.
Hierzu ein Hinweis: In der Excel-Datei Modul 2 befindet sich ein zweites Makro zum Abspeichern auf einer externen Festplatte (die in der Arbeit ist: Dies ist der Code
Sub LP_Beamte()
Const Pfad As String = "F:\LP-Beamte\2017\"     'Abschließender Backslash!!!
Dim DatNam As String, DatExt As String
'2. Eine Message Box öffnet sich in der gefragt wird ob wirklich gespeichert werden soll.  _
Antwort Yes or No
DatNam = ThisWorkbook.Name                                        'Dateiname (ohne Pfad)
DatExt = Mid(DatNam, InStrRev(DatNam, "."))                       'Dateinamenerweiterung ( _
mit Punkt)
DatNam = Mid(DatNam, 1, InStrRev(DatNam, ".") - 1)                'Dateiname (ohne Pfad,  _
ohne Erweiterung)
DatNam = DatNam & Format(Now, "_DD.MM.YY_hh-mm") & DatExt    'neuer Dateiname
If MsgBox("Soll eine Kopie der Datei" & vbLf & ThisWorkbook.Name & vbLf & "unter" & vbLf &  _
_
Pfad & DatNam & vbLf & "abgelegt werden", vbYesNo) = vbYes Then
'3. Bei Yes: Die Datei wird mit dem akuellen Dateinamen plus Datum _
und Uhrzeit in den angegebenen Ordner gespeichert.
ThisWorkbook.SaveCopyAs Pfad & DatNam
End If
'4. Bei No: Abbruch
'5. ENDE
End Sub

Anzeige
AW: Spalten vergleichen und doppelte markieren
08.10.2017 13:08:32
Sepp
Hallo Parza,
die Meldung kommt, wenn in einer Tabelle die Spalte 13 leer ist.
So kommt keine Meldung.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub vergleich()
Dim objWS As Worksheet, objAllWS As Worksheet
Dim objColor As Range, objFind As Range, objValue As Range, objCell As Range

Const lngColumn As Long = 13 'Vergleichsspalte!

On Error GoTo ErrorHandler

For Each objAllWS In ThisWorkbook.Worksheets
  Set objValue = Nothing
  On Error Resume Next
  Set objValue = objAllWS.Columns(lngColumn).SpecialCells(xlCellTypeConstants)
  Err.Clear
  On Error GoTo ErrorHandler
  If Not objValue Is Nothing Then
    For Each objWS In ThisWorkbook.Worksheets
      If Not objWS Is objAllWS Then
        Set objColor = Nothing
        For Each objCell In objValue
          Set objFind = objWS.Columns(lngColumn).Find(what:=objCell.Value, LookIn:=xlValues, _
            Lookat:=xlWhole, MatchCase:=False, SearchFormat:=False)
          If Not objFind Is Nothing Then
            If objColor Is Nothing Then
              Set objColor = objFind
            Else
              Set objColor = Union(objColor, objFind)
            End If
          End If
        Next
        If Not objColor Is Nothing Then objColor.Font.Color = vbRed
      End If
    Next
  End If
Next

ErrorHandler:

If Err.Number <> 0 Then
  MsgBox "Fehler in Modul2" & vbLf & vbLf & "Prozedur:" & vbTab & "vergleich" & vbLf & _
    "Nummer:" & vbTab & Err.Number & vbLf & "Meldung:" & vbTab & Err.Description & vbLf & _
    IIf(Erl, "Zeile:" & vbTab & Erl, ""), vbExclamation, "Fehler!"
  Err.Clear
End If

Set objAllWS = Nothing
Set objWS = Nothing
Set objColor = Nothing
Set objCell = Nothing
Set objValue = Nothing
Set objFind = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Spalten vergleichen und doppelte markieren
08.10.2017 13:28:25
parza
Hallo Sepp,
danke dir für deine schnelle Antwort; jetzt markiert er alles in den Spalten 13 rot.
In dem Fall würde ich bei deinem ersten Vorschlag bleiben. Es stimmt, dass eine Registerkarte in Spalte 13 leer ist. Soll ich einfach einen Platzhalter einfügen?
Lieben Gruß, parza
AW: Spalten vergleichen und doppelte markieren
08.10.2017 13:32:06
Sepp
Hallo Parza,
also bei mir funktioniert es, kannst du deine Testdatei hochladen?
Gruß Sepp

Anzeige
AW: Spalten vergleichen und doppelte markieren
08.10.2017 13:48:08
parza
Hallo Sepp,
das ist eigenartig. Ich hab eine Testdatei zum Hochladen erstellt; hier funktioniert es auch.
D.h. das Problem liegt woanders. Eventuell auch der Grund, warum die ursprüngliche Programmierung nicht klappt. Bin aber ratlos.
Wie gesagt, ich kann mit der ersten Lösung gut leben. Ist ja nur ein Klick.
Lieben Gruß, parza
Anzeige
AW: Spalten vergleichen und doppelte markieren
08.10.2017 13:50:28
Sepp
Hallo Parza,
du musst aber wissen, dass die Spalten nach dem Fehler nicht mehr abgearbeitet werden.
Stehen in Spalte 13 Werte oder Formeln?
Gruß Sepp

AW: Spalten vergleichen und doppelte markieren
08.10.2017 13:59:20
parza
Nein, nur 8-stellige Zahlen. Macht die Formatierung (Text, Standard oder Zahl) einen Unterschied.
Die absolut leere Registerkarte ist die letzte, also nicht weiter tragisch. Aber es steht nicht in jeder Zeile der Spalte 13 ein Wert. Manche sind leer.
parza
Anzeige
AW: Spalten vergleichen und doppelte markieren
08.10.2017 14:03:31
Sepp
Hallo Parza,
mein zweiter Code macht genau das gleiche wie der erste, nur eben mit Prüfung, ob die Spalte leer ist.
Gruß Sepp

AW: Spalten vergleichen und doppelte markieren
08.10.2017 14:24:40
parza
Hallo Sepp,
ich habe keine Ahnung, woran es liegt, aber mit der Fehlermeldung klappt es, ohne werden alle 13er Spalten rot (bis auf ein paar wenige, die schwarz bleiben). Es ist das gleiche Phänomen wie bei der anderen Programmierung, auch dort die meisten rot und ein paar wenige schwarz. Hab es zwar nicht explizit überprüft, aber ich glaube, es sind die gleichen Zahlen.
Ich möchte dich eigentlich nicht weiter nerven, da ich auch nichts zur Lösung beitragen kann.
Wie gesagt in der Testdaei zum Hochladen ohne die anderen, gelöschten Daten (sensibel aus Datenschutzgründen) funktioniert es auch.
LG, parza
Anzeige
AW: Spalten vergleichen und doppelte markieren
08.10.2017 15:48:49
Sepp
Hallo Parza,
ohne anonymisierte Originaldaten kann ich die nicht weiterhelfen.
Gruß Sepp

;

Forumthreads zu verwandten Themen

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

Doppelte Werte in zwei Spalten markieren mit Excel


Schritt-für-Schritt-Anleitung

Um in Excel 2 Spalten zu vergleichen und doppelte Werte farbig zu markieren, folge diesen Schritten:

  1. Öffne Excel und lade die Datei, die die zu vergleichenden Daten enthält.

  2. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinDateiname)", wähle "Einfügen" und dann "Modul".
  4. Kopiere den folgenden VBA-Code in das Modul:

    Sub vergleich()
       Dim objWS As Worksheet, objAllWS As Worksheet
       Dim objColor As Range, objFind As Range, objValue As Range, objCell As Range
       Const lngColumn As Long = 13 ' Spalte M (13. Spalte)
       On Error GoTo ErrorHandler
    
       For Each objAllWS In ThisWorkbook.Worksheets
           Set objValue = objAllWS.Columns(lngColumn).SpecialCells(xlCellTypeConstants)
           For Each objWS In ThisWorkbook.Worksheets
               If Not objWS Is objAllWS Then
                   Set objColor = Nothing
                   For Each objCell In objValue
                       Set objFind = objWS.Columns(lngColumn).Find(what:=objCell.Value, LookIn:=xlValues, Lookat:=xlWhole)
                       If Not objFind Is Nothing Then
                           If objColor Is Nothing Then
                               Set objColor = objFind
                           Else
                               Set objColor = Union(objColor, objFind)
                           End If
                       End If
                   Next objCell
                   If Not objColor Is Nothing Then objColor.Font.Color = vbRed
               End If
           Next objWS
       Next objAllWS
       Exit Sub
    ErrorHandler:
       ' Fehlerbehandlung
       MsgBox "Fehler in Modul2: " & Err.Description
    End Sub
  5. Führe das Makro aus:

    • Schließe den VBA-Editor und gehe zurück zu Excel.
    • Drücke ALT + F8, wähle vergleich und klicke auf "Ausführen".

Der Code vergleicht alle Werte in Spalte M der verschiedenen Registerkarten und markiert alle doppelten Werte rot.


Häufige Fehler und Lösungen

  • Fehler: "Keine Zellen gefunden."

    • Dieser Fehler tritt auf, wenn in einer der Spalten keine Daten vorhanden sind. Stelle sicher, dass alle Spalten, die du vergleichen möchtest, Daten enthalten.
  • Problem: Doppelte Werte werden nicht markiert.

    • Überprüfe die Formatierung der Zellen. Wenn die Zellen unterschiedliche Formate haben (Text vs. Zahl), kann Excel sie als ungleich betrachten.
  • Frage: Funktioniert das auch bei leeren Zellen?

    • Ja, das Skript ignoriert leere Zellen. Achte jedoch darauf, dass in den Spalten, die du vergleichst, keine durchgehenden leeren Zellen sind.

Alternative Methoden

  • Bedingte Formatierung:

    1. Markiere die Zellen in Spalte M.
    2. Wähle "Start" > "Bedingte Formatierung" > "Neue Regel".
    3. Wähle "Formel zur Ermittlung der zu formatierenden Zellen verwenden" und gib folgende Formel ein:
      =ZÄHLENWENN($M:$M;M1)>1
    4. Wähle eine Formatierung (z.B. rote Schrift) und klicke auf "OK".
  • Excel-Funktionen: Du kannst auch die Funktion VERGLEICH nutzen, um identische Werte in zwei Spalten zu finden und zu markieren.


Praktische Beispiele

  • Beispiel 1: Du hast zwei Listen mit Kundennummern in Spalte M und möchtest alle doppelten Kundennummern markieren.
  • Beispiel 2: Wenn du zwei Tabellen mit Produkt-IDs hast und die gleichen IDs in einer Liste hervorheben möchtest.

Verwende den oben beschriebenen Code, um die jeweiligen Werte zu vergleichen.


Tipps für Profis

  • Dynamische Spaltenreferenzen: Wenn sich die Spalten häufig ändern, kannst du den Code anpassen, um die Spalte dynamisch auszuwählen, z.B. durch eine Eingabeaufforderung.

  • Performance-Optimierung: Bei großen Datensätzen kann das Ausführen von Makros lange dauern. Reduziere die Anzahl der Blätter, die verglichen werden, wenn du weißt, dass nur bestimmte Blätter relevant sind.

  • Verwendung von Dictionary: Für sehr große Datenmengen kann das Verwenden von Dictionary-Objekten schneller sein als das Durchlaufen von Zellen.


FAQ: Häufige Fragen

1. Wie kann ich die Spalte ändern, die verglichen werden soll? Um eine andere Spalte zu vergleichen, ändere die Konstante lngColumn im Code auf die entsprechende Spaltennummer (z.B. 12 für Spalte L).

2. Was tun, wenn ich die Fehlermeldung "Keine Zellen gefunden" erhalte? Prüfe, ob die angegebene Spalte leere Zellen enthält. Der Code kann nicht mit leeren Spalten arbeiten. Stelle sicher, dass die Spalte Werte hat, die verglichen werden können.

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