こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAでVLOOKUPを使用

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

投稿日時 - 2012-06-19 12:26:14

QNo.7542449

暇なときに回答ください

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

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にコードを記入する。

投稿日時 - 2012-06-19 13:37:27

お礼

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

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

ありがとうございました。

投稿日時 - 2012-06-19 18:40:32

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問