VBA中的连续单元格值

是否有可能比较连续单元格值与单个单元格? 例如:

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

我试过这个,但显示错误TYPEMISMATCH

expression式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 

另一种select是过滤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 .....