是否可以将连续单元格值与单个单元格进行比较?例如:
If Sheets("Sheet2").Range("E4:E6").Value = Sheets("Sheet1").Range("D4").Value Then
....
我试过这个但显示错误TYPEMISMATCH
该表达式Sheets("Sheet2").Range("E4:E6").Value
返回一个二维数组,其中包含这些单元格中的值。如您所见,您无法使用等号运算符将值与数组进行比较。
如果您想查看该值是否存在,您可以像这样使用 Match 工作表函数
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 需要一个一维数组, Range().Value 返回一个二维数组,因此您必须使用 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
尝试
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
.....