正则表达式中的VBA检查行

时间:2013-12-17 12:51:39

标签: excel-vba vba excel

我尝试检查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行

感谢您的帮助

2 个答案:

答案 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“

我会考虑一下正确的解决方案......但是现在,当你达到两位数时,这就是你的表达失败的原因。