是否可以将连续的细胞值与单个细胞进行比较?例如:
If Sheets("Sheet2").Range("E4:E6").Value = Sheets("Sheet1").Range("D4").Value Then
....
我试过了,但显示错误TYPEMISMATCH
答案 0 :(得分:1)
表达式Sheets("Sheet2").Range("E4:E6").Value
返回包含这些单元格中的值的二维数组。您无法将数值与具有相同运算符的数组进行比较。
如果您想查看该值是否存在,可以使用匹配工作表函数,如下所示
Sub FindMatch()
Dim lMatch As Long
On Error Resume Next
lMatch = Application.WorksheetFunction.Match(Range("D4").Value, Range("E4:E6").Value, False)
On Error GoTo 0
If lMatch > 0 Then
Debug.Print "Value exists"
Else
Debug.Print "Not included"
End If
End Sub
如果您正在尝试确定该范围内的所有值是否相同,您可以像这样使用Sumif
Sub FindAllMatch()
Dim dSum As Double
If Application.WorksheetFunction.Sum(Range("E4:E6")) = Application.WorksheetFunction.SumIf(Range("E4:E6"), Range("D4").Value) Then
Debug.Print "All match"
Else
Debug.Print "One doesn't match"
End If
End Sub
另一个选项是Filter VBA函数,它返回按某些条件筛选的数组。 Filter需要一个1-d数组和Range()。Value返回一个2-d数组,因此你必须使用Transpose函数进行转换。
Sub Findmatch2()
Dim vaOneD As Variant
Dim sMatch As String
sMatch = Range("D4").Value
vaOneD = Application.WorksheetFunction.Transpose(Range("E4:E6").Value)
If UBound(Filter(vaOneD, sMatch, True)) > -1 Then
Debug.Print "There's a match"
Else
Debug.Print "No match"
End If
End Sub
要检查所有值是否相同,请将相应的行更改为
If UBound(Filter(vaOneD, sMatch, True)) - LBound(Filter(vaOneD, sMatch, True)) = UBound(vaOneD) - LBound(vaOneD) Then
答案 1 :(得分:0)
尝试
Sheets("Sheet2").Range("E4:E6") = Sheets("Sheet1").Range("D4").Value
如果没有,那么你需要一个for循环:
c = true
for each i in Sheets("Sheet2").Range("E4:E6")
If i <> Sheets("Sheet1").Range("D4").Value then
c = false
Exit for
End if
Next
If c then
.....