3

是否可以将连续单元格值与单个单元格进行比较?例如:

If Sheets("Sheet2").Range("E4:E6").Value = Sheets("Sheet1").Range("D4").Value Then

....

我试过这个但显示错误TYPEMISMATCH

4

2 回答 2

2

该表达式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
于 2013-03-05T14:05:41.753 回答
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
.....
于 2013-03-05T11:45:39.943 回答