Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Formel-Vergleich zwischen zwei Zellen

Formel-Vergleich zwischen zwei Zellen
Tom
Hallo,
ich hab´da ein Problem...
Es geht um zwei (umfangreiche) Dateien, die eigentlich identisch sein sollten. Die Dateien sind vollgespickt mit Formeln. Ich möchte nun feststellen, ob es Zellen gibt, deren Formeln zwischen den beiden Dateien abweichen (z.B. Datei "1", Tabelle3, Zelle A4 beinhaltet eine andere Formel als Datei "2", Tabelle3, Zelle A4). Ich müsste also jede Zelle mit der anderen abgleichen, aber nicht mir Sverweis, weil Sverweis ja nicht die Formeln vergleicht.
Den Vergleich würde ich über eine dritte "Vergleichsdatei" machen wollen.
Geht das überhaupt? Vielleicht kann mit jemand helfen?
N.B.: Es wäre für mich keine Lösung, einfach die Datei zu kopieren, damit es keine Formelunterschiede geben kann. Ich muss die Abweichungen feststellen können.
Viele Grüße
Tom
Anzeige
AW: Formel-Vergleich zwischen zwei Zellen
28.02.2010 18:30:11
Gerd
Hallo Tom,
hast Du Formeln mit externen Bezügen auf andere Dateiein? Sollen diese dann jeweils ebenfalls identisch sein?
Gruß Gerd
AW: Formel-Vergleich zwischen zwei Zellen
28.02.2010 18:33:41
Tom
Hallo Gerd,
nein, externe Bezüge sind in den Dateien nicht vorhanden!
Viele Grüße
Tom
AW: Formel-Vergleich zwischen zwei Zellen
28.02.2010 18:38:05
Josef
Hallo Tom,

ungetestet!
Der Vergleich läuft nur einseitig, das heißt, die Formelzellen werden nur in der ersten Datei erfasst und mit der Zweiten verglichen.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub compareFormulas()
  Dim objWbA As Workbook, objWbB As Workbook
  Dim objShA As Worksheet, objShB As Worksheet
  Dim strFileA As String, strFileB As String
  Dim rng As Range, rngFormula As Range, vntRes As Variant
  Dim lngIndex As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
  End With
  
  strFileA = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
    "*.xls; *.xlsx; *.xlsm", Title:="Erste Datei auswählen")
  
  If strFileA = CStr(False) Then GoTo ErrExit
  
  strFileB = Application.GetOpenFilename("Excel Dateien (*.xls; *.xlsx; *.xlsm)," & _
    "*.xls; *.xlsx; *.xlsm", Title:="Zweite Datei auswählen")
  
  If strFileB = CStr(False) Then GoTo ErrExit
  
  Set objWbA = Workbooks.Open(strFileA)
  Set objWbB = Workbooks.Open(strFileB)
  
  lngIndex = lngIndex + 1
  Redim vntRes(1 To 3, 1 To lngIndex)
  vntRes(1, lngIndex) = "Tabelle/Adresse"
  vntRes(2, lngIndex) = objWbA.Name
  vntRes(3, lngIndex) = objWbB.Name
  
  For Each objShA In objWbA.Worksheets
    If SheetExist(objShA.Name, objWbB) Then
      Set objShB = objWbB.Sheets(objShA.Name)
      Set rng = Nothing
      On Error Resume Next
      Set rng = objShA.UsedRange.SpecialCells(xlCellTypeFormulas)
      On Error GoTo 0
      If Not rng Is Nothing Then
        For Each rngFormula In rng
          If rngFormula.Formula <> objShB.Range(rngFormula.Address).Formula Then
            lngIndex = lngIndex + 1
            Redim Preserve vntRes(1 To 3, 1 To lngIndex)
            vntRes(1, lngIndex) = objShA.Name & " " & rngFormula.Address(0, 0)
            vntRes(2, lngIndex) = "'" & rngFormula.FormulaLocal
            vntRes(3, lngIndex) = "'" & objShB.Range(rngFormula.Address).FormulaLocal
          End If
        Next
      End If
    End If
  Next
  
  objWbA.Close False
  objWbB.Close False
  
  With ThisWorkbook.Sheets(1)
    .UsedRange.ClearContents
    .Rows(1).Font.Bold = True
    .Range("A1").Resize(lngIndex, 3) = Application.Transpose(vntRes)
    .Columns.AutoFit
  End With
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then MsgBox "Fehler " & .Number & vbLf & vbLf & _
      .Description & vbLf & vbLf & "In Prozedur (compareFormulas) in Modul Modul1", _
      vbExclamation, "Fehler in Modul1 / compareFormulas"
  End With
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
  End With
  
  Set objShA = Nothing
  Set objShB = Nothing
  Set objWbA = Nothing
  Set objWbB = Nothing
End Sub

Private Function SheetExist(ByVal sheetName As String, Optional Wb As Workbook) As Boolean
  Dim wks As Worksheet
  On Error GoTo ERRORHANDLER
  If Wb Is Nothing Then Set Wb = ThisWorkbook
  For Each wks In Wb.Worksheets
    If wks.Name = sheetName Then SheetExist = True: Exit Function
  Next
  ERRORHANDLER:
  SheetExist = False
End Function

Gruß Sepp

Anzeige
@Sepp AW: Formel-Vergleich zwischen zwei Zellen
28.02.2010 18:58:38
Tom
Hallo Sepp,
Dein Makro ist ja ein echter Hammer...
Ich werde es leider erst morgen testen können, da ich im Moment keinen Zugriff auf die zu vergeichenden Dateien habe.
Leider sind meine Kenntnisse in vba sehr begrenzt, daher noch folgende Frage: an welchen Stellen muss ich Dein Makro anpassen? Ich hoffe, das hält sich in Grenzen, so dass Du mir die Frage beantworten kannst...
Viele Grüße
Tom
Anzeige
@Sepp AW: Formel-Vergleich zwischen zwei Zellen
28.02.2010 19:00:28
Josef
Hallo Tom,

anpassen musst du eigentlich gar nichts.
Die Dateien wählst du nacheinander per Dialog aus, das Ergebnis wird im ersten Tabellenblatt der Datei die den Code enthält ausgegeben.

Gruß Sepp

Anzeige
@Sepp AW: Formel-Vergleich zwischen zwei Zellen
28.02.2010 19:19:49
Tom
Hallo Sepp,
ich habe das Makro an zwei sehr einfachen Dateien exemplarisch ausprobiert. Und das Makro funktioniert suuuper!!!
Vielen, vielen Dank!!!!!
Tom
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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