ワークシート関数のVLOOKUPのようですが、VLOOKUPだとキーになる列より左を取り出せないです。
(IDから名称ならば簡単にできます。)
それでVBAでやるならば、普通Findを使って次のような感じです。
Sub test() Dim res Dim str As String str = "アップル " Set res = Range("B:B").Find(what:=str, lookat:=xlWhole, MatchCase:=True, MatchByte:=True) If Not res Is Nothing Then Debug.Print res.Offset(0, -1).Value Else Debug.Print str & "は見つかりません" End If End Sub
FINDを使うときは、LookAtの引数を指定しないと規定値が部分一致なのでxlWhole(全て一致)を必ず指定してください。
また、検索して見つからなかった場合の処理も必要です。
詳しくはこちら。
オレンジ 1 の並びならVLOOKUPワークシート関数! だけど逆だからMatchワークシート関数!!
いずれの場合も見つからなかった場合はエラーとなるのでON ERROR処理となる!!
Sub Macro1() Dim searchRange As Range, searchName As String, matchRow As Long On Error GoTo Err searchName = "アップル" With Worksheets("Sheet1") Set searchRange = Worksheets("Sheet1").Range("B1:B3") matchRow = Application.WorksheetFunction.Match(searchName, searchRange) MsgBox "IDは" & .Range("A" & matchRow).Value & "です。" End With Exit Sub Err: MsgBox "該当なし" End Sub
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_ws_kansu.html
だけど! ON ERRORに頼るとろくな事がない!! VBAならFINDのほうがスマート!!
Sub Macro2() Dim searchName As String, searchRange As Range, matchCell As Object, matchRow As Long searchName = "アップル" With Worksheets("Sheet1") Set searchRange = .Range("B1:B3") Set matchCell = searchRange.Find(searchName) If matchCell Is Nothing Then MsgBox "該当なし" Else matchRow = matchCell.Row MsgBox "IDは" & .Range("A" & matchRow).Value & "です。" End If End With End Sub
http://excelvba.pc-users.net/fol7/7_1.html
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_find.html
C1 に検索したい文字列があるとき、D1に式を書くとして
=IF(COUNTIF($B$1:$B$3,C1),LOOKUP(C1,$B$1:$B$3,$A$1:$A$3),"")
リンク先も一緒なのに、どうして? 今後のために選考基準を教えていただければ幸いです。