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