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

zellenwert vorher und nachher vergleichen

Forumthread: zellenwert vorher und nachher vergleichen

zellenwert vorher und nachher vergleichen
07.02.2016 02:51:11
Torsten
Hallo,
ich möchte gerne mittels VBA den Zellenwert der aktiven Zelle vergleichen.
Funktion soll so laufen:
Zellwert vorher z.B. "Test"
Zellwert nacher "Test1"
jetzt soll eine Reaktion folgen (msgbox o.ä.)
Sind die vorher/nacher Werte unverändert soll auch nicht passieren.

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zellenwert vorher und nachher vergleichen
07.02.2016 03:19:55
Matthias
Hallo
In ein allg. Modul
Option Explicit
Public vorher_nacher
in das Tabellenblatt
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target  vorher_nacher Then MsgBox "Zelle geändert. von: " & vorher_nacher & " auf -> " &  _
Target
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
vorher_nacher = Target
End Sub
Userbild
Gruß Matthias

Anzeige
AW: zellenwert vorher und nachher vergleichen
07.02.2016 11:29:59
Torsten
Hallo Matthias,
vielen Dank für deine schnelle Antwort.
Ja, es geht schon in die Richtung, welche ich anstrebe.
Ich möchte gerne mit dieser Funktion eine Zelle auf eine hinzugefügte Formatierung überprüfen.
Sollte sich also die Formatierung in einem Tabellenblatt(durchgestrichener Text) verändern, soll dieses die msgbox auslösen.
Eine Kontrolle, ob der Text gestrichen ist, kann ich mit diesem Marko durchführen.
Jedoch kein Vergleich zwischen vorher/nachher.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Cells(4, 3).Font.Strikethrough = True Then
Cells(4, 3).Offset(, 1) = Cells(4, 3).Value
Cells(4, 3).Offset(, 2) = "Durchgestrichen"
Else Cells(4, 3) = "" Then
Cells(4, 3).Offset(, 1) = ""
Cells(4, 3).Offset(, 2) = ""
End If
End Sub

Anzeige
AW: zellenwert vorher und nachher vergleichen
07.02.2016 16:17:02
Werner
Hallo Torsten,
im alten Beitrag hast du doch geschrieben, dass das Problem gelöst ist?
Das Problem hat mir keine Ruhe gelassen und ich habe ein wenig herum gespielt. Versuche mal folgendes:
Code ins Tabellenblatt, in dem er sich auswirken soll
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
vorher_nacher = Target.Value
Quelle = Target.Address
Ziel = Target.Offset(0, 1).Address
With Sheets("Tabelle1")
.Range(Ziel).Value = vorher_nacher
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Sheets("Tabelle1")
If Quelle  "" Then
.Range(Quelle).Value = .Range(Quelle).Value
Call prüfung
End If
End With
End Sub

Code in ein allgemeines Modul
Option Explicit
Public vorher_nacher As String
Public Quelle As String
Public Ziel As String
Public Sub prüfung()
Application.EnableEvents = False
If Sheets("Tabelle1").Range(Quelle).Font.Strikethrough = True Then
Sheets("Tabelle1").Range(Ziel).Value = "gestrichen am"
Sheets("Tabelle1").Range(Ziel).Offset(0, 1).Value = Now()
Sheets("Tabelle1").Range(Ziel).Offset(0, 2).Value = "durch"
Sheets("Tabelle1").Range(Ziel).Offset(0, 3).Value = Application.UserName
End If
vorher_nacher = ""
Quelle = ""
Ziel = ""
Application.EnableEvents = True
End Sub
Am besten testest du mal mit einer neuen Datei.
Derzeit wird im kompletten Blatt "Tabelle1" der rechte Mausklick überwacht. Wird in der Zelle dann der Text durchgestrichen, werden die Protokollierungsdaten ins gleiche Blatt, mit einem Offset zur überwachten Zelle geschrieben. Das müsstest du dann noch an deine Bedürfnisse anpassen.
Gruß Werner

Anzeige
AW: zellenwert vorher und nachher vergleichen
07.02.2016 17:11:23
Torsten
Hallo Werner,
ich habe eine neue Tabelle erstellt.
Jedoch hängt er sich im Sub:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
bei "Quelle" auf?!
Hmmm...

AW: zellenwert vorher und nachher vergleichen
07.02.2016 21:20:14
Torsten
YES !!!!!!!
Oh Werner du Retter in der Not.
Nun ist das Wochenende um und man hat sich die ganze Zeit den Kopf zerbrochen.
Es klappt!
Den Rest bastel ich mir noch zusammen.
Das ganze Internet wußte es entweder nicht oder es war nicht in diese Richtung bekannt.
Und da kommt der Werner und es funzt.
Vielen lieben Dank !!!!!

Anzeige
AW: zellenwert vorher und nachher vergleichen
08.02.2016 07:17:34
Werner
Hallo Torsten,
ich hab mal noch ein wenig gebastelt. Wichtig vor allem, der Code den du bereits hast, läuft in einen Fehler, wenn mehrere Zellen ausgewählt werden. Bei diesem Code jetzt wurde dieser Fehler abgefangen, eine Mehrfachauswahl wird mit entsprechender Meldung unterbunden.
Zusätzlich habe ich jetzt die Ausgabe der Protokolldaten auf Tabellenblatt 2 ausgelagert -musst du halt an deine Bedürfnisse anpassen.
Und bei der ganzen Sache bedenken, dass es datenschutzrechtlich bedenklich sein könnte.
Code in allgemeines Modul
Option Explicit
Public vorher_nacher As String
Public Quelle As String
Public Ziel As Long
Public Sub prüfung()
Application.EnableEvents = False
If Sheets("Tabelle1").Range(Quelle).Font.Strikethrough = True Then
Sheets("Tabelle2").Cells(Ziel, 1).Value = vorher_nacher
Sheets("Tabelle2").Cells(Ziel, 2).Value = "in Zelle " & Quelle
Sheets("Tabelle2").Cells(Ziel, 3).Value = "gestrichen am "
Sheets("Tabelle2").Cells(Ziel, 4).Value = Now()
Sheets("Tabelle2").Cells(Ziel, 5).Value = "durch " & Application.UserName
End If
vorher_nacher = ""
Quelle = ""
Application.EnableEvents = True
End Sub
Code im Tabellenblatt
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target  "" Then
vorher_nacher = Target.Value
Quelle = Target.Address
Ziel = Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Sheets("Tabelle1")
If Target.Count > 1 Then
MsgBox "Mehrfachauswahl nicht zulässig"
ActiveCell.Select
End If
If Quelle  "" Then
.Range(Quelle).Value = .Range(Quelle).Value
Call prüfung
End If
End With
End Sub
Gruß Werner

Anzeige
AW: zellenwert vorher und nachher vergleichen
07.02.2016 16:47:41
Werner
Hallo Torsten,
was ich noch vergessen habe. Die Protokollierung erfolgt erst, wenn die Zelle in welcher der Text durchgestrichen wurde wieder verlassen wird.
Gruß Werner
;
Anzeige
Anzeige

Infobox / Tutorial

Zellenwert vorher und nachher vergleichen in Excel


Schritt-für-Schritt-Anleitung

Um den Zellenwert in Excel zu vergleichen, kannst Du VBA verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne das VBA-Editor:

    • Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.
  2. Füge ein allgemeines Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Option Explicit
    Public vorher_nacher As String
    Public Quelle As String
    Public Ziel As Long
    
    Public Sub prüfung()
       Application.EnableEvents = False
       If Sheets("Tabelle1").Range(Quelle).Font.Strikethrough = True Then
           Sheets("Tabelle2").Cells(Ziel, 1).Value = vorher_nacher
           Sheets("Tabelle2").Cells(Ziel, 2).Value = "in Zelle " & Quelle
           Sheets("Tabelle2").Cells(Ziel, 3).Value = "gestrichen am "
           Sheets("Tabelle2").Cells(Ziel, 4).Value = Now()
           Sheets("Tabelle2").Cells(Ziel, 5).Value = "durch " & Application.UserName
       End If
       vorher_nacher = ""
       Quelle = ""
       Application.EnableEvents = True
    End Sub
  4. Füge den folgenden Code in das Tabellenblatt ein, wo die Überwachung erfolgen soll:

    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
       If Target <> "" Then
           vorher_nacher = Target.Value
           Quelle = Target.Address
           Ziel = Sheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1
       End If
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       With Sheets("Tabelle1")
           If Target.Count > 1 Then
               MsgBox "Mehrfachauswahl nicht zulässig"
               ActiveCell.Select
           End If
           If Quelle <> "" Then
               .Range(Quelle).Value = .Range(Quelle).Value
               Call prüfung
           End If
       End With
    End Sub
  5. Testen:

    • Ändere den Text in einer Zelle und setze ihn durchgestrichen. Die Änderungen werden in Tabelle2 protokolliert.

Häufige Fehler und Lösungen

  • Fehler: "Typenkonflikt":

    • Überprüfe, ob die Zelle, die Du anklickst, leer ist. Der Code erwartet einen Wert.
  • Fehler: "Mehrfachauswahl nicht zulässig":

    • Dies ist kein Fehler, sondern eine Sicherheitsmaßnahme. Du musst eine Zelle auf einmal auswählen.
  • Fehler: "Zelle hängt sich auf":

    • Stelle sicher, dass Du nicht in einer Schleife steckst. Vermeide, dass der Code sich selbst auslöst, indem Du Application.EnableEvents = False verwendest.

Alternative Methoden

Eine einfache Alternative, um Zellenwerte zu vergleichen, ohne VBA, ist die Verwendung von Excel-Formeln:

  • Mit der IF-Funktion:

    =IF(A1=B1, "Keine Änderung", "Geändert")

    Diese Formel vergleicht die Werte in den Zellen A1 und B1 und zeigt an, ob sie gleich sind.

  • Bedingte Formatierung: Du kannst auch die bedingte Formatierung verwenden, um Zellen hervorzuheben, deren Werte sich geändert haben.


Praktische Beispiele

  1. VBA zur Überwachung:

    • Der folgende VBA-Code kann verwendet werden, um eine Nachricht anzuzeigen, wenn sich der Zellenwert ändert:
      Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Value <> vorher_nacher Then
         MsgBox "Zelle geändert. von: " & vorher_nacher & " auf -> " & Target.Value
      End If
      End Sub
  2. Excel-Funktion für Datenvergleich:

    • Verwende EXACT, um die Genauigkeit von Textvergleichen zu überprüfen:
      =EXACT(A1, B1)

Tipps für Profis

  • Verwende Application.EnableEvents: Dies verhindert, dass der Code in eine Endlosschleife gerät, wenn Du Zellenwerte änderst.

  • Protokolliere Änderungen: Halte eine Log-Tabelle, um alle Änderungen zu verfolgen – nützlich für Audits oder Rückverfolgbarkeit.

  • Optimiere Deine Makros: Reduziere die Anzahl der Berechnungen und Events, um die Performance zu steigern.


FAQ: Häufige Fragen

1. Wie kann ich die Überwachung auf mehrere Zellen gleichzeitig erweitern? Du musst den Code anpassen, um eine Schleife zu implementieren, die durch die ausgewählten Zellen iteriert.

2. Kann ich auch andere Formatierungen (z. B. Fett oder Kursiv) überwachen? Ja, Du kannst die Bedingungen im VBA-Code anpassen, um andere Formatierungen zu überprüfen. Ersetze einfach Font.Strikethrough durch die gewünschte Formatierungsbedingung.

3. Welche Excel-Version benötige ich für diese VBA-Codes? Die meisten VBA-Codes sind mit Excel 2010 und höher kompatibel. Achte darauf, dass Du Makros aktiviert hast.

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