|
姓と名の間のスペースに規則性があるなら、
検索する姓と名を連結してから、完全一致で検索すればヒットするはずです。
仮にそうした規則性がなく、姓と名とを別々にチェックせざるを得ないなら、
部分一致検索を使って、次のような感じになるのではないですか?
(ただし、姓と名のケースによっては上手くいかないケースがあるかもしれません。
例えば、「太」で「太一」にマッチしてしまうとかですね。
そうしたケースが頻出するなら、そのための対応が必要ですが、
とりあえずコードを作ってみました。参考になれば。)
Sub 検索結果()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim name1 As String
Dim name2 As String
Dim fnd As Range
Dim flag As Boolean
Dim firstAddress As String
Dim r As Long
'検索シート(ws2)、一覧シート(ws1)を省略形
Set ws1 = Worksheets("一覧")
Set ws2 = Worksheets("検索")
'氏名を検索
name1 = ws2.Range("A1").Value
name2 = ws2.Range("A2").Value
'一覧シートの氏名を検索
flag = False
With ws1.Columns("A")
Set fnd = .FIND(what:=name1, lookat:=xlPart)
If Not fnd Is Nothing Then
firstAddress = fnd.Address
If InStr(fnd.Value, name2) > 0 Then
flag = True
Else
Do
Set fnd = .FindNext(fnd)
If InStr(fnd.Value, name2) > 0 Then
flag = True
Exit Do
End If
Loop While Not fnd Is Nothing And fnd.Address <> firstAddress
End If
End If
End With
'氏名が存在すれば、行番号を取得
If flag = True Then
r = fnd.Row
'検索シートに結果を表示
ws2.Cells(1, 3).Value = ws1.Cells(r, 3).Value '社名
ws2.Cells(1, 4).Value = ws1.Cells(r, 4).Value '住所
ws2.Cells(1, 5).Value = ws1.Cells(r, 5).Value '電話番号
ws2.Activate
Else
MsgBox "該当するデータがありません"
End If
End Sub
本来は、姓と名の間を(例えば)全角空白ひとつに限定することとし、
これに沿って元データを作り直しておくのが、良いと思います。
こうすれば、検索する姓と名を全角空白を含めて連結してから、
完全一致で検索すればヒットするわけですから、悩む必要がありません。
なお、貴兄の変数宣言の方法はまちがいです。
>Dim TanNo, FIND As String
とすると、String型なのはFindだけで、TanNoはVariant型です。
それぞれ型宣言する必要があります。
|
|