• ベストアンサー
  • 暇なときにでも

VBAでVLOOKUPを使用

  • 質問No.7542449
  • 閲覧数285
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 88% (16/18)

Sheet1とListというシートがあり、
Sheet1のF4を検索の条件として、Listシートのitem_list(A2:E100)から
数値を引っ張ってくるマクロを探して、ようやく下記のコードを見つけ、
表示させる事に成功しました。

item_listの2行目が現状でF5に表示されるようになってますが、
これにプラスして、同時にitem_listの3行目をF6、4行目をF7に表示させる所で
行き詰っています。

下記のコードはネットで見つけまして、自分の設定に合わせ少し変更した
程度でまだまだ理解不足の点が多く、今回質問させて頂きました。

ご教授宜しくお願いいたします。


Private Sub Worksheet_Change(ByVal Target As Range)

'変更のあったセルが Target という引数で参照できます
Select Case Target.Address

'入力したセルが F4 ならば Sub Find を Call します
Case "$F$4"
Dim SerchName As String
Dim SerchArea As Range
Dim Results As Variant

'初期設定
Range("F4").Activate
ItemCode = Range("F4").Value
i = 0

'検索範囲の設定(ポイント1)
Set SerchArea = Worksheets("List").Range("item_list")

'商品コードが空になったら終わり
Do Until ItemCode = ""

'エラーになっても続行する
On Error Resume Next

'商品コードに該当するデータを探し、Resultsに入れる
ItemCode = ActiveCell.Offset(i, 0).Value
Results = Application.WorksheetFunction.VLookup(ItemCode, SerchArea, 2, False)

'該当するデータがないとエラーになるための処理、エラーなら空欄にする
If Err <> 0 Then Results = ""

ActiveCell.Offset(1, i) = Results

i = i + 1

Loop

End Select

End Sub

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 66% (5277/7938)

Sheet1のシート名タブを右クリックしてコードの表示を開始する
今のマクロを綺麗に消去する
次のマクロをコピー貼り付ける

private sub worksheet_change(byval Target as excel.range)
 if target.address <> "$F$4" then exit sub
 if target = "" then exit sub
 on error resume next

 with range("F5:F7")
  .formula = "=VLOOKUP($F$4,List!$A$2:$E$100,ROW(F2),FALSE)"
  .value = .value
  .specialcells(xlcelltypeconstants, xlerrors).clearcontents
 end with
end sub

ファイルメニューから終了してエクセルに戻る
F4にコードを記入する。
お礼コメント
axizaft2000

お礼率 88% (16/18)

keithinさん、回答ありがとうございます。
早速試してみましたところ、うまくいきました。

コードも簡潔になっているので、とても有難いです。
1行1行じっくり勉強させていただきます。

ありがとうございました。
投稿日時:2012/06/19 18:40
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ