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

Forumthread: Zellen / Spalten auf Wertänderung prüfen

Zellen / Spalten auf Wertänderung prüfen
19.03.2009 10:03:07
Lars
Hallo zusammen
Ich möcgte z.B. eine Änderung einer Zelle (F5) überwachen und bei Änderung dann einen Wert in eine weitere Zelle (C5) schreiben. Dazu habe ich mir folgendes Makro erstellt:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$5" Then
Range("C5").Value = "changed"
End If
End Sub


Das funktioniert soweit auch. Nun habe ich aber in meinem File ca. 500 Zeilen und ca. 15 Spalten die ich überwachen sollte. Was ich vermeiden möchte ist, dass ich für jede Zelle ein "IF" Statement schreiben muss.
Nun meine Frage:
A; Ist es möglich, in der Target.Adress einen Bereich, nicht nur eine Zelle anzugeben? "$F$5:$H$5" geht irgendwie nicht.
B; Wie könnt man das Makro für alle Zeilen nutzen, also z.B. wird in der Zeile 5 im Bereich F bis H geändert, soll die Änderung in C5 eingetragen werden, wird in der Zeile 10 im Bereich F bis H geändert, soll die Änderung in C10 eingetragen werden?
Besten Dank für eure Hilfe
Lars

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Zellen / Spalten auf Wertänderung prüfen
19.03.2009 11:00:19
dan
Hallo,
ja man kann z.B. Veraenderungen in der Spalte 'A' abfangen:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
' If Target.Address = "$F$5" Then
If (Target.Column = 1) Then
Target.Offset(0, 1).Value = "changed"
End If
End Sub


Gruss dan, cz.

Anzeige
AW: Zellen / Spalten auf Wertänderung prüfen
19.03.2009 13:06:37
Lars
Hallo dan
besten Dank! Geht soweit, aber da ist noch eine Frage aufgekommen.
Ist es möglich, dass ich immer in die Spalte C (fest) schreibe, die Reihe ist abhängig von der Selektion, also geändert wird in A5 -- nun wird in C5 "changed" eingetragen, oder geändert wird in H11 -- nun wird ind C11 "changed" geschriben.
Wenn ich die Offsets verstelle (Target.Offset(0, 1).Value = "changed") geht das auch soweit (solange nur eine Zelle bearbeitet wird), nur wenn ich dann mehrere Zeilen markiere und diese lösche schreibt es mir wie wild "changed" auf den sheet.
Merci
lars
Anzeige
AW: Zellen / Spalten auf Wertänderung prüfen
19.03.2009 14:02:50
dan
Hallo Lars,
ich verstehe Dich jetzt nicht ganz. Versuch es bitte nochmals beschreiben. Wie soll es genau funkzionieren?
Im Prinzip benutzt man den 'Target' parameter als eine Zelle, wo man den Wert geandert hat. Und offset Methode veschiebt dei Zell-Koordinaten damit man auf eine andere Zelle zugreifen kann.
Also man kann testen, wo die Eingabe statgefunden hat (Target) und man kann dann etscheiden, was passiert.
dan, cz.
Anzeige
AW: Zellen / Spalten auf Wertänderung prüfen
19.03.2009 14:26:56
Lars
Hallo dan
also ich vesuch es nochmals.
Zur Anschaung habe ich dir noch das File in den Upload gelegt.
https://www.herber.de/bbs/user/60468.xls
Also ich möchte Änderungen in allen Zellen der Spalten A,B, D,E,F ab der Reihe 5 überwachen, bis zur letzten Reihe (65536). Hat eine Änderung stattgefunden, möchte ich, dass in der Spalte C der aktuellen Reihe der String "changed" geschrieben wird. Beispiel, ich ändere in der Zelle A5, dann schreibt es mir in C5 "changed", ich ändere in E7, dann schreibt es mir in C7 "changed".
Das möchte ich dann verwenden um weitere Aktionen in Abhängigkeit der Spalte C auszulösen.
Das Makro unten macht eigentlich genau das was was ich will, nur, dass es mir wenn ich Zellenbereiche markiere (die auserhalb dieser Bereiche liegen) mir überall mit dem Offset die "changed" Strings einträgt.

Private Sub Worksheet_Change(ByVal Target As Range)
'Spalte A
If (Target.Column = 1) Then
Target.Offset(0, 2).Value = "changed"
'Spalte B
ElseIf (Target.Column = 2) Then
Target.Offset(0, 1).Value = "changed"
'Spalte D
ElseIf (Target.Column = 4) Then
Target.Offset(0, -1).Value = "changed"
'Spalte E
ElseIf (Target.Column = 5) Then
Target.Offset(0, -2).Value = "changed"
'Spalte F
ElseIf (Target.Column = 6) Then
Target.Offset(0, -3).Value = "changed"
End If
End Sub


Besten Dank für Deine Mühe
Gruss
lars

Anzeige
AW: Zellen / Spalten auf Wertänderung prüfen
19.03.2009 15:13:13
Gerd
Hallo Lars!

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Union(Columns("A:B"), Columns("D:F"), Rows("5:65536"))) Is Nothing  _
Then
Cells(Target.Row, "C") = "Changed"
End If
Application.EnableEvents = True
End Sub


'wenn mal nichts geht
Sub Event_Repartur()
Application.EnableEvents = True
End Sub


Gruß Gerd

Anzeige
AW: Zellen / Spalten auf Wertänderung prüfen
19.03.2009 15:25:12
dan
Ok, verstanden :-). Probiere es mit diesem Code aus:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'    If Target.Address = "$F$5" Then
'       Range("C5").Value = "changed"
' ab der Reihe 5
If (Target.Rows(1).Row 



Private Sub WriteChanged(ByRef targetedColumn As Range, ByVal columnOffset As Integer)
Dim c As Range
Application.EnableEvents = False
For Each c In targetedColumn.Cells
c.Offset(0, columnOffset).Value = "changed"
Next c
Application.EnableEvents = True
End Sub


Anzeige
AW: Zellen / Spalten auf Wertänderung prüfen
20.03.2009 10:35:52
Lars
Hallo
Danke für beide Versionen, gehen beide :-)
Genua das was ich wollte!
Merci vielmals
Lars
;
Anzeige
Anzeige

Infobox / Tutorial

Zellen und Spalten auf Wertänderung prüfen in Excel VBA


Schritt-für-Schritt-Anleitung

Um Zellen in Excel zu überwachen, kannst du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung, wie du eine Änderung in einer Zelle überwachen und den Wert in einer anderen Zelle ändern kannst:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Wähle das Arbeitsblatt aus, in dem du die Änderungen überwachen möchtest (z.B. "Sheet1").

  3. Füge den folgenden Code in das Codefenster des Arbeitsblatts ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       If Not Intersect(Target, Range("A5:B65536, D5:F65536")) Is Nothing Then
           Cells(Target.Row, "C").Value = "changed"
       End If
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Ändere eine Zelle in den Spalten A, B, D, E oder F ab der Zeile 5. Der Text "changed" sollte automatisch in der entsprechenden Zelle der Spalte C erscheinen.


Häufige Fehler und Lösungen

  • Fehler: "Die Änderungen können nicht gespeichert werden"

    • Überprüfe, ob das Makro aktiviert ist. Gehe zu Datei > Optionen > Vertrauensstellungscenter > Einstellungen für das Vertrauensstellungscenter > Makroeinstellungen und aktiviere die Makros.
  • Fehler: "Das Makro funktioniert nicht wie erwartet"

    • Stelle sicher, dass das Application.EnableEvents = False und Application.EnableEvents = True korrekt gesetzt sind, um das Auslösen von anderen Events zu verhindern.

Alternative Methoden

Falls du eine andere Methode bevorzugst, um die Zellenänderungen zu überwachen, kannst du auch den Worksheet_SelectionChange-Event verwenden, um die Änderungen in Echtzeit anzuzeigen. Hier ein Beispiel:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("A5:B65536, D5:F65536")) Is Nothing Then
        Cells(Target.Row, "C").Value = "changed"
    End If
End Sub

Diese Methode aktualisiert die Zelle in Spalte C, wenn du eine Zelle in den überwachten Bereichen auswählst.


Praktische Beispiele

Hier sind einige praktische Anwendungsbeispiele für das Überwachen von Zellen mit VBA:

  1. Änderung in Spalte A oder B überwachen: Wenn du in Zelle A5 "Test" eingibst, wird "changed" in C5 eingetragen.
  2. Mehrere Zellen gleichzeitig auswählen: Wenn du mehrere Zellen in den überwachten Bereichen auswählst und änderst, wird "changed" nur in den entsprechenden C-Zellen eingetragen.

Tipps für Profis

  • Verwende Application.EnableEvents = False, um zu verhindern, dass das Makro während der Änderungen erneut ausgelöst wird. Dies kann helfen, Endlosschleifen zu vermeiden.
  • Du kannst auch Union verwenden, um mehrere Bereiche zusammenzufassen, was die Lesbarkeit des Codes erhöht.
  • Experimentiere mit bedingten Formatierungen in Kombination mit deinem VBA-Skript, um visuelles Feedback zu geben, wenn eine Änderung stattgefunden hat.

FAQ: Häufige Fragen

1. Frage
Wie kann ich mehrere Spalten gleichzeitig überwachen?
Antwort: Du kannst die Union-Funktion verwenden, um mehrere Spalten in einer Zeile zu kombinieren, wie im Beispiel gezeigt.

2. Frage
Was passiert, wenn ich mehrere Zellen gleichzeitig ändere?
Antwort: Wenn du mehrere Zellen änderst, wird "changed" nur in den Zellen der Spalte C eingetragen, die den Änderungen entsprechen, solange das Makro entsprechend implementiert 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