使用括号表示法比较不同的范围

时间:2017-06-17 06:22:04

标签: excel-vba vba excel

我想将范围A2N2A3N3A4N4进行比较,并希望输出在{{ 1}} L2True/FalseA2的比较结果,N2A3的比较结果必须在N3就像那样。

L3N2N16N3之间的下一次比较....

请提供您的反馈,以便我可以继续进行。

我已经编写了以下代码,但选择范围对我来说不起作用:

N17

2 个答案:

答案 0 :(得分:1)

正如评论中所述,VBA无法处理[A1,A2] = [N2,N3][L2,L3] = "yes"等数组操作,因此您需要单独执行每项测试,例如:

Sub CompareCells()
    If [A2] = [N2] Then [L2] = "yes" Else [L2] = "No"
    If [A3] = [N3] Then [L3] = "yes" Else [L3] = "No"
    If [A4] = [N4] Then [L4] = "yes" Else [L4] = "No"
End Sub

或者你需要一个循环,例如:

Sub CompareCells()
    Dim r As Long
    For r = 2 To 4
        If Cells(r, "A").Value = Cells(r, "N").Value Then
            Cells(r, "L").Value = "yes"
        Else
            Cells(r, "L").Value = "no"
        End If
    Next
End Sub

在您的问题中没有足够的信息来了解如何扩展此代码以将N2与N16等进行比较,但是您应该很容易继续使用上述方法来处理它。

答案 1 :(得分:1)

使用括号表示时,例如[A1]您正在使用EVALUATE方法:

  

使用方括号(例如," [A1:C5]")与使用字符串参数调用Evaluate方法相同。

您可以通过在括号表示法指定的范围上设置Formula属性来使用它来执行您想要的操作,例如:

Option Explicit

Sub CompareCells1()

    [L2:L10].Formula = "=IF(A2=N2,""yes"",""no"")"

End Sub

请注意使用:获取Range - 使用,表示您可以这样做:

Option Explicit

Sub CompareCells2()

    ' you need to type each cell reference upto L10....
    [L2, L3, L4, L5].Formula = "=IF(A2=N2,""yes"",""no"")"

End Sub

哪个不如{{​​1}}。

您可以将范围分配给CompareCells1,但您不能简单地比较两个这样的数组 - 这不会起作用:

Variant

您可以使用Option Explicit Sub CompareCells3() Dim var1, var2 var1 = [A2:A10] var2 = [N2:N10] ' throws a Type Mismatch error If var1 = var2 Then ' this will never happen End If End Sub var1方法suggested by Siddarth in his comment, per Tim Williams post按照上述错误示例对var2Transpose进行比较,但我认为Join如果您需要或想要使用括号表示法,方法最简单。

使用CompareCells1进行比较会导致误报。例如:

,

此处Option Explicit Sub CompareCells4() Dim var1, var2 var1 = [A2,A10] var2 = [N2,N10] ' creates a string from the range values If var1 = var2 Then ' this is a false positive - check the value of var1 and var2 [L2:L10] = "False positive" End If End Sub 只是var1的值而A2只是var2的值,即使您可以使用括号设置范围N2符号并不能满足您的要求。