2013-03-05 85 views
2

是否可以將連續單元格值與單個單元格進行比較?例如:VBA中的連續單元格值

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

.... 

我試過,但顯示錯誤TYPEMISMATCH

+0

你不能讓這個comaparison。 – 2013-03-05 11:55:59

+0

@ user2063626,如果你很聰明,你可以看到我的答案。 – glh 2013-03-05 11:59:01

+1

@glh哇...奇蹟...與細胞價值的單元格的comaring範圍是不可能的。 (「Sheet2」)。Range(「E4:E6」)。Value = Sheets(「Sheet1」)。Range(「D4」)。Value Then) – 2013-03-05 12:00:58

回答

0

嘗試

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

如果沒有,那麼你需要一個循環:

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 
..... 
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函數,該函數返回按某些條件過濾的數組。過濾器需要一維數組和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 
+0

'sum'不適用於非數值單元值,您應該使用'countif'代替。比我的'for-loop'好得多。 ;) – glh 2013-03-11 10:19:15

+0

是的,'COUNTIF'好得多。謝謝。 – 2013-03-11 13:53:22

相關問題