Eine Familie von Microsoft-Tabellenkalkulationsprogrammen mit Tools zum Analysieren, Darstellen und Kommunizieren von Daten
Diese Antwort wurde automatisch übersetzt. Daher können grammatikalische Fehler oder seltsame Formulierungen vorkommen.
Sehr geehrte S.. W..,
Vielen Dank, dass Sie sich an die Microsoft-Supportcommunity gewandt haben. Wir helfen Ihnen gerne weiter.
Was Ihre Anforderung betrifft, die letzte Änderung pro Zeile über mehrere Arbeitsblattversionen hinweg zu verfolgen: Es ist zwar technisch möglich, dies mit Formeln zu erreichen, aber die Logik wird recht komplex und schwer zu pflegen, insbesondere wenn die Anzahl der Blätter zunimmt. Aus diesem Grund empfehle ich dringend, stattdessen ein VBA-Makro zu verwenden. Es ist eine viel effizientere und skalierbarere Lösung für diese Art von Aufgabe.
Leider war ich nicht in der Lage, die von Ihnen freigegebene Beispieldatei herunterzuladen, daher habe ich meinerseits eine vereinfachte Version erstellt, um die Makrologik zu testen. In meiner Umgebung hat es erfolgreich funktioniert, daher möchte ich Sie ermutigen, es auch auf Ihrer Seite auszuprobieren.
So sieht meine Beispieldatei aus:
- Um das Makro auszuführen, drücken Sie ALT+F11, um den VBA-Editor zu öffnen.
- Fügen Sie > Modul ein.
- Fügen Sie das Makro unten ein.
- Drücken Sie F5, oder klicken Sie auf Ausführen, um das Makro auszuführen.
Sub TrackLastChangeByRow()
Dim wsIndex als Arbeitsblatt
Dim wsAls Arbeitsblatt vergleichen
Dim idBereich als Bereich, Zelle als Bereich
Dim id als Variante
Dim lastChange As String
Dim i So Long, j As Long
Schwache Übereinstimmung als boolescher Wert
BasisBlatt als Arbeitsblatt dimmen
CompareSheet als Arbeitsblatt dimmen
Dim idRow so lange
Dim colCount As Long
Set baseSheet = Worksheets ("Index 01")
colCount = baseSheet.Cells(1, Spalten.Anzahl). Ende(xlToLeft). Spalte
Für jede Zelle In baseSheet.Range("B2:B" & baseSheet.Cells(Rows.Count, "B"). Ende (xlUp). Reihe)
id = Zelle. Wert
lastChange = "-"
idRow = Zelle. Rudern
Für i = 2 Bis Arbeitsblätter.Zählen
Set compareSheet = Arbeitsblätter(i)
Wenn compareSheet.Name wie "Index *" dann
match = Wahr
For j = 3 To colCount ' Beginnen Sie in Spalte C , um die ID und die Ergebnisspalte zu überspringen
Wenn baseSheet.Cells(idRow, j). Wert <> compareSheet.Cells(idRow, j). Wert dann
Treffer = Falsch
Ende , wenn
Weiter j
Wenn nicht übereinstimmend, dann
lastChange = compareSheet.Name
Ende , wenn
Ende , wenn
Weiter i
baseSheet.Cells(idRow, 1). Wert = lastChange
Nächste Zelle
MsgBox "Nachverfolgung der letzten Änderung abgeschlossen!"
Ende Sub
So sieht es aus, nachdem ich das Makro ausgeführt habe:
HINWEIS: Stellen Sie sicher, dass Ihre Blätter einheitlich benannt sind (z. B. Index 01, Index 02 usw.) und dass die Struktur (Spalten) auf allen Blättern gleich ist.
Wir hoffen, dass diese Informationen für Sie hilfreich sind. Wenn Sie weitere Bedenken haben oder weitere Hilfe benötigen, zögern Sie bitte nicht, sich an uns zu wenden, damit wir einen Blick darauf werfen und Sie weiterhin unterstützen können.
Alles Gute
Viego An - MSFT | Spezialist für Microsoft-Community-Support.