2017-02-13 50 views
0

我有兩個工作表,我試圖比較並查看wksht1中的值是否在wksht2中找到。找出使用COUNTIF發現的項目

For Each c In wksht2 
    If WorksheetFunction.CountIf(wksht1, c.Value) > 0 Then 
     sh2.Range("j10") = c.Value 
    End If 
Next 

這將返回在wksht1中找到的值(如果找到它)。 例如: 比方說,我有兩個列表

表1:

名稱:1,NAME3,Name17,Name85

表2:

Name12, Name6,Name3

比較列表2和列表1,我會發現在列表1中找到「Name3」,並且上面的函數將在單元格J10中返回「Name3」。

但我還需要確定它被發現......舉例來說,在這個例子中,「NAME3」在列表1中的位置將是位置2​​

所以,我怎麼能搜索字符串,如果找到了,請確定它被發現的單元格?

回答

1

這個函數會找到一個給定val

Function where(rng As Range, val As Variant) As String 
    Dim r As Range 
    Set r = rng.Find(val) 
    If r Is Nothing Then 
     where = val & " was not found" 
    Else 
     where = r.address 
    End If 
End Function 

Sub TestIt() 
    Debug.Print where(Sheet1.UsedRange, "abcde") 
End Sub 

編輯第一次出現的地址:這裏有一個版本,將讓大家在一個逗號分隔的字符串匹配的地址(CSV):

Function whereAll(rng As Range, val As Variant) As String 
    Dim r As Range, firstFound As String 
    Set r = rng.Find(val) 
    If r Is Nothing Then Exit Function 
    firstFound = r.address 
    Do 
     whereAll = whereAll & "," & r.address 
     Set r = rng.FindNext(r) 
    Loop Until r.address = firstFound 
    whereAll = Mid(whereAll, 2, 100000) 
End Function 
+0

是否有可能使用此代碼並發現超過第一次出現?例如,如果你找到了這個名字,但是想繼續檢查它是否被再次發現? – Apolymoxic

+0

當然是,使用循環。但是你不能在'J10'中輸入太多的信息.​​..... –

+0

不,我知道我不能把所有的東西放在J10中,但是這確實有幫助。感謝您提供的信息和答案。太棒了。 – Apolymoxic

相關問題