我想将范围A2
与N2
,A3
与N3
,A4
与N4
进行比较,并希望输出在{{ 1}} L2
为True/False
与A2
的比较结果,N2
与A3
的比较结果必须在N3
就像那样。
L3
与N2
,N16
与N3
之间的下一次比较....
请提供您的反馈,以便我可以继续进行。
我已经编写了以下代码,但选择范围对我来说不起作用:
N17
答案 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按照上述错误示例对var2
和Transpose
进行比较,但我认为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
符号并不能满足您的要求。