簡體   English   中英

Excel VBA:比較兩個單元格的公式/公式結構

[英]Excel VBA: Compare formulas / formula structure of two cells

我正在嘗試編寫代碼,以測試兩個單元格中的公式/公式結構是否可比。 該代碼的目的是檢查一個單元格中的公式是否已從例如該單元格復制到左側或上方的單元格。 因此,我需要測試公式的結構是否相同,絕對單元格引用是否相同以及相對單元格引用是否像復制單元格一樣發生變化。

例:
假設Sheet2中的單元格B5包含公式“ = Sheet1! B3 + $ A $ 1/10”。 然后,我想檢查單元格C5是否包含公式“ = Sheet1! C3 + $ A $ 1/10”,並得到true / false作為結果。

我知道在這里發布您正在處理的代碼是一種習慣,但是我不確定在這種情況下這是否有益還是令人困惑。 到目前為止,我已經嘗試了三種方法:

  1. 跟蹤原始單元格的直接先例(在上面的示例中為B5),將其抵消並替換為從B5中提取的公式,並檢查該公式是否等於C5中的公式。 由於跟蹤先例無法處理表外引用,因此不起作用。

  2. 通過使用RegExp獲取公式中的所有單元格引用。 抵消這些引用,並將其替換為從B5中提取的公式,然后測試該公式是否等於C5。 如果我能夠完成此方法,則該方法可能會起作用,但它將是一個令人難以置信的大型復雜子程序,其中包含大量文本處理和很多工作,我懷疑可以采用一種更簡單的方法。

  3. 使用“幫助”表將單元格B5復制到C5,並檢查公式是否等於單元格C5中的原始公式。 可以,但是如果我要檢查較大的范圍/工作表,則需要花很多時間。

有人有什么建議嗎?

就像是

Option Explicit

Sub test()
    Debug.Print SameFormula(Range("B8"), Range("C8"))
End Sub

Public Function SameFormula(ByVal rng1 As Range, ByVal rng2 As Range) As Boolean
    If rng1.HasFormula And rng2.HasFormula Then
        SameFormula = rng1.FormulaR1C1 = rng2.FormulaR1C1
    Else
        SameFormula = False
    End If
End Function

其中B8有=Sheet1!B3+$A$1/10而C8有=Sheet1!C3+$A$1/10 您可以調整這個想法。

如果沒有早期版本的HasFormula:

Public Function SameFormula2(ByVal rng1 As Range, ByVal rng2 As Range) As Boolean
    If Left$(rng1.Formula, 1) = "=" And Left$(rng2.Formula, 1) = "=" Then
        SameFormula2 = rng1.FormulaR1C1 = rng2.FormulaR1C1
    Else
        SameFormula2 = False
    End If
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM