2017-02-13 9 views
0

wksht2の値がwksht2にあるかどうかを比較しようとしている2つのワークシートがあります。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、名前6、名前3

リスト2をリスト1と比較すると、リスト1に "Name3"が見つかり、上記の関数がセルJ10に "Name3"を返すことがわかります。

しかし、私は、この例では、リスト1の「NAME3」の配置が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 

EDITの最初の出現のアドレスを見つける:ここではあなたのカンマ区切りの文字列(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

関連する問題