2017-10-04 16 views
0

検索機能を持つExcelでマクロを作成しています。だから基本的に。私は、サーバーのリストをSheet3列Aに配置し、シート1列Aのサーバーを検索します。完了すると、結果はシート2列Aに表示されます。ただし、ワイルドカードを検索する際に問題があります。例えば。私はサーバー "ABC123"を見張りたいが、それは誰もがコードで私を助けることができるサーバー "ABC123.def"の全体名である必要があるため、結果を表示しません?Excelでのワイルドカード検索

Option Explicit 
Sub HostNameFinder() 
Dim srchLen, hName, nxtRw As String 
Dim g As Range 
'Clear Sheet 2 and Copy Column Headings 
Sheets(2).Cells.ClearContents 
Sheets(1).Rows(1).Copy Destination:=Sheets(2).Rows(1) 
'Determine length of Search Column from Sheet3 
    srchLen = Sheets(3).Range("A" & Rows.Count).End(xlUp).Row 
'Loop through list in Sheet3, Column A. As each value is 'found in Sheet1, Column A, copy it top the next row in Sheet2 
    With Sheets(1).Columns("A") 
    For hName = 2 To srchLen 
     Set g = .Find(Sheets(3).Range("A" & hName), lookat:=xlWhole) 
     If Not g Is Nothing Then 
      nxtRw = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row + 1 
      g.EntireRow.Copy Destination:=Sheets(2).Range("A" & nxtRw) 
     End If 
    Next 
    End With 
End Sub 

答えて

0

マクロレコーダーを起動し、式と選択しないオプション「マッチ全体のセル内容」で検索するオプションを指定して「ABC123」の検索を実行した場合、Excelが値ABC123でセルを見つけるだろう.def

マクロレコーダーによって作成されたコードを調べて、コードとの違いに気付くことができます。 lookat:=xlWholeを使用します。つまり、セル全体が表示されます。それをLookAt:=xlPartに変更します。これは、ワイルドカードを使用するのと同じです。

または、アスタリスクのセットで検索用語をラップして構築します。

Set g = .Find("*" & Sheets(3).Range("A" & hName) & "*", lookat:=xlWhole) 
+0

ありがとう、ライフセーバー! –

関連する問題