我尝试检查VBA中给定行的公式的一致性。
具体地说:公式中所有行的引用必须是当前行的引用。
细胞的连续性:a2&“”& b2 ==>我想避免(检查)类似的东西:a2&“”& b3
我用于此rexexpr但我找不到正确的语法。
我的代码:
Dim RegExpr As Object
Dim ChkSheet As Worksheet
Dim i as Long
Dim Count as Long
Set ChkSheet = ActiveSheet
for i = 2 to 15
Set RegExpr = CreateObject("vbscript.regexp")
'-------- PARAM REGEXPR --------'
Ic = False
Fi = ChkSheet.Cells(i, 3).Formula
Fw = "[A-Z]+[^" & i & "]"
'-------------------------------'
RegExpr.Pattern = Fw
RegExpr.IgnoreCase = Ic
RegExpr.Global = True
If RegExpr.Test(Fi) = True Then
MsgBox "Problem found, line : " & i & ", formula : " & Fi
Count = Count + 1
End If
Next i
MsgBox "Errors : " & Count
这:“[A-Z] + [^”&我和我“]”不再适用于第10行
感谢您的帮助
答案 0 :(得分:2)
使用正则表达式解决这个问题会很困难。复杂性包括$
,具有完全限定范围的公式(例如Worksheet!A1
),命名范围和允许R1C1
表示法。支持命名范围可能会使正则表达式无法解决问题。
但是,有一个VBA解决方案。假设包含公式的单元格为$A$1
。您可以使用.Precedents
上的Range
属性来检查$A$1
所依赖的所有单元格。然后比较这些单元格的行:
Sub test()
Dim rng As Excel.Range
Set rng = Range("$A$1")
Dim cell As Excel.Range
For Each cell In rng.Precedents
'Am I in the same row? Stop if not.
If rng.Row <> cell.Row Then Stop
Next cell
End Sub
答案 1 :(得分:0)
问题出在你的正则表达式上(你可能已经想到了我们自己)。
让我们看看第11行,你在那里测试:
[A-Z]+[^11]
在正则表达式中,这意味着“零个或一个字符AZ,而不是其中一个字符1, 1
。所以你没有测试”不是11
“,你正在测试”下一个字符“不是1“
我会考虑一下正确的解决方案......但是现在,当你达到两位数时,这就是你的表达失败的原因。