2016-07-07 60 views
0

How to find if an array contains a string使用此答案中的UDF我試圖測試列C中的每個單元格是否在aCheck數組中。最後,我想切割單元格所在的行(如果確認在陣列內)並將該行粘貼到新表單中,但是到目前爲止,我在嘗試時收到帶有UDF的type mismatch errorBy Ref error和調試。UDF如果值在數組中 - 類型與以前的答案不匹配 - IsInArray

我修改我在上述答案發現ByVal arr As Range函數時它最初是arr As Variant

acheck(aCheck_Row, 1)的表達被定義爲在局部變量窗口一個stringaSelection做參考列C,當我觀看錶達式在當地人的窗口內,Values2表達確實列出了工作表上的工作表值。

就像我剛纔提到的,我用ByVal vs ByRef搞砸了,並將函數中的對象從數組中改爲範圍..我也注意到上面的答案建議答案只適用於我相信我有的一維數組。

如何測試列C中的值是否在數組acheck(aCheck_Row, 1)中,或者如果不能完成如何測試列C中的值是否在範圍aSelection

Function IsInArray(stringToBeFound As String, ByVal arr As Range) As Boolean 
    IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) 
End Function 

LR = Range("C1500").End(xlUp).Row 
ReDim acheck(1 To LR) 

For i = 2 To LR 
    aCheck_Row = aCheck_Row + 1 
    acheck(aCheck_Row, 1) = CStr(cells(i, cA))  
Next i 

For Each cell In aSelection 
    If IsInArray(cell.Value, aSelection) Then 
    cell.Style = "Accent1" 
    End If 
Next cell 
+1

使用過濾器()不是,除非你有很大的方法很高興在數組元素的子串中返回一個匹配。 –

回答

0

Filter帶有一個數組作爲參數和Range不是數組。 Range.Value會生成一個填充範圍值的箭頭,但即使範圍不是(它變爲(1 To 1, 1 To n)(1 To n, 1 To 1)數組),它也是一個二維數組。

在這種情況下,最簡單的解決辦法是將搜索範圍直接

Function IsInRange(stringToBeFound As String, ByVal rng As Range) As Boolean 
    Dim r As Range 
    Set r = rng.Find(What:=stringToBeFound, _ 
     MatchCase:=True, _ 
     LookIn:=xlValues, _ 
     Lookat:=xlPart) 'partial match to have the same behaviour as the filter version 
    If Not r Is Nothing Then IsInRange = True 
End Function 

編輯:你也應該設置搜索參數,以您的需求