VBA中的连续单元值

时间:2013-03-05 11:38:51

标签: excel excel-vba vba

是否可以将连续的细胞值与单个细胞进行比较?例如:

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

....

我试过了,但显示错误TYPEMISMATCH

2 个答案:

答案 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
.....