2016-10-06 8 views
0

ブックのSheet1に記載されている従業員番号がいくつかあります。いくつかの情報(多分日付が働いた)を持つ従業員番号を含むワークブック内の他のいくつかのシート(これらのシートをA、B、C、Dなどと呼ぶことができます)があります。ワークシートAに従業員番号が含まれている場合は、他のワークシートには表示されませんが、ワークシートAには複数の時間が表示されることがあります。値の各場所のアドレスの代わりにFIRST INSTANCEのExcel VBAアドレス

VBAを書きました。従業員番号が見つかる場所のセルの場所を返します。従業員番号はA2から始まる列Aにリストされ、番号が従業員番号の右側にある場所がリストされます。 How Sheet1 looks Sheet "A"

右今、私が実行したときに私のVBAマクロは、その従業員番号が発見された場所のすべてのセルの場所が一覧表示されますが、私は何をしたい、それが私にだけFIRSTのセル位置を与えるで行いますその従業員番号のINSTANCE。次に、シート1の列Aに記載されている次の従業員番号に移動します。これは私がこれまで持っていたVBAです。

Sub makeMySearch() 
Dim ws As Worksheet, lastrow As Long 

For Each cell In Sheets("Sheet1").Range("A2:A" & Sheets("Sheet1").Range("A1").End(xlDown).Row) 
    recFound = 0 

    For Each ws In ThisWorkbook.Worksheets 
     If ws.Name <> "Sheet1" Then 
      lastrow = Sheets(ws.Name).Range("A1").End(xlDown).Row 
      For Each cell2 In Sheets(ws.Name).Range("A1:A" & lastrow) 

       If InStr(cell2.Value, cell.Value) <> 0 Then 

        recFound = recFound + 1 
        cell.Offset(0, recFound) = Split(cell2.Address, "$")(1) & Split(cell2.Address, "$")(2) 

       End If 
      Next cell2 
     End If 
    Next ws 
Next cell 

MsgBox "Done Finding!" 

End Sub 

答えて

0

あなたがいる場合は、この方法では

Exit Forを経由して)それはまた、より効率的な方法を示して最初の発見に止めるのではなく、各シートのすべてのセル

Sub makeMySearch() 
    Dim cell As Range, cell2 As Range 
    Dim ws As Worksheet, lastrow As Long, recFound As Long 
    Dim rw As Variant 
    Dim dat As Variant, i As Long 

    With Worksheets("Sheet1") 
     dat = .Range(.Cells(2,1), .Cells(.Rows.Count,1).End(xlUp)).Value 
     For i = 1 To UBound(dat, 1) 
      For Each ws In ThisWorkbook.Worksheets 
       If ws.Name <> "Sheet1" Then 
        rw = Application.Match(dat(i, 1) , ws.Columns(1), 0) 
        If Not IsError(rw) Then 
         .Cells(i+1, 2) = "A" & rw 
         ' Option: show Sheet name and cell 
         '.Cells(i+1, 2) = ws.Name & "!A" & rw 
         Exit For 
        End If 
       End If 
      Next ws 
     Next 
    End With 

    MsgBox "Done Finding!" 
End Sub 
+0

をいただき、ありがとうございますあなたの迅速な対応!私は本当にあなたの助けに感謝しますが、これは非常にトリックをやっていません。私はあなたのコードを実行したときには、シート1のセルA:1にあるものだけを探しています。シート1の列A(行2から始まる)にリストされている各従業員番号を検索する必要があります。 – user6896503

+0

@ user6896503それは何をしているのですか?私のコードとあなたの両方は、Sheet1の列Aのデータの特定のレイアウトに依存しています。ちょうどレイアウトは、Sheet1と他のシートのいずれかからいくつかのサンプルデータであなたのQを更新できることを確認する。 –

+0

私はそれを更新し、2枚の写真を追加しました。 1つは検索シートの外観を示し、もう1つは他のシートのデータの外観を示しています。私はVBAで何年も前に仕事をしていましたが、それは初心者に過ぎませんでした。 – user6896503

0

をループしますSheet1の列Aが見出し行で、行2でデータが開始されると、次の行を編集する必要があるだけです。

dat = .Range(.Cells(1,1)).Cells(2、1)。終わり( xlDown))バリュー

ことにする:。。

DAT = .Range(.Cells(2、1)、.Cells(2、1).END(xlDown))値

関連する問題