【问题标题】:Compare different ranges with bracket notation用括号符号比较不同的范围
【发布时间】:2017-06-17 17:19:35
【问题描述】:

我想将A2N2A3N3A4N4 进行比较,并希望L2 中的输出为True/False 以获取@987654329 的比较结果@ vs N2A3N3 的比较结果必须在L3 之类的。

还有N2N16N3N17之间的下一个比较......

请提供您的反馈,以便我进一步处理。

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

Sub CompareCells()
    If [A2,A3] = [N2,N3] Then
        [L2,L3] = "yes"
    Else
        [L2,L3] = "no"
    End If
End Sub

【问题讨论】:

  • 是的,这听起来很简单。您有什么需要帮助的吗?
  • 是的,我希望 vba 代码执行上面的..
  • 比较?什么? =, >, =, ?
  • (a) 问题中没有足够的信息来为您编写 VBA 代码 (b) 所以无论如何都不是“我的代码”网站。我们愿意帮助您解决您在您的代码方面遇到的问题,但您需要告诉我们您遇到了什么问题。
  • 我想将单元格 A2 与 N2 、 A3 与 N3 、 A4 与 N4 进行比较,直到第 30 行。

标签: excel vba


【解决方案1】:

如 cmets 中所述,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 等,但应该很容易让您继续上述方法来处理它。

【讨论】:

  • 上面的查询对我有用..:) 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
  • 非常感谢大家...因为 t 是周末,但我仍然得到了大家的精彩回复..非常感谢...
【解决方案2】:

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

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

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

Option Explicit

Sub CompareCells1()

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

End Sub

注意使用: 来获得Range - 使用,s 意味着你会这样做:

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

哪个不如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

您可以使用TransposeJoin 方法suggested by Siddarth in his comment, per Tim Williams post 比较var1var2 以上错误示例,但如果您需要或想要,我认为CompareCells1 方法对您来说是最简单的, 使用括号表示法。

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

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 的值意味着即使您可以使用括号表示法设置L2:L10 的范围,也无法得到正确的比较你的要求。

【讨论】:

  • 感谢您的回答。周末我超级懒惰 :D
  • 不用担心-当我看到您的有用评论时,我正在重新发明轮子以获取指向 Tim 的答案的指针:)
猜你喜欢
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多