- 締切済み
vbaでvlookup
エクセルのVBAについて。 指定した範囲の中から検索条件に一致したデータを検索し、取り出してくれる関数vlookup をVBAで実現したいのですが、 目標として、エクセルのセル(列)に、値を入力されているとします。 VBAを実行するボタンをクリックすると、、、 その値に対応する文字列(事前に用意)をその値の右のセルに自動で入力させたいです。 このVBAを作ることが目標です。 vbaでvlookupを実現でなくても、それよりも簡単な方法があれば教えていただきたいです。 お手数ですが、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- High_Score
- ベストアンサー率25% (45/176)
No1です。補足します。 反則と書いた理由は、VBAを組む目的がVBAの勉強で、その題材としてvlookupを選んだのかと思ったのです。違うなら何でもいいです。 worksheetfunction.vlookupがお勧めです。 もちろんこの一文だけでなくSub ~ など必要ですが。
- tom04
- ベストアンサー率49% (2537/5117)
No.2です。 >ワークシート関数 >というのは、何でしょうか? >VBAでその関数を記述できるのでしょうか? ワークシート関数=単に「関数」です。 すなわち前回の画像の配置だと B2セルに =VLOOKUP(A2,D:E,2,FALSE) という数式を入れB2セルのフィルハンドルでダブルクリック! これで完了です。 それをVBAでと!いう質問でいたので 前回のSample1がそのままの関数を使用して、A列の最終行までB列に結果を表示させる!というコードにしていました。 Sample2の方は関数を使用せず、A2セル~A列最終行までループさせて A列データがD列にあればその右隣りのデータをB列に表示させる! というコードにしています。 ※ No.1さんが紹介してくださっている WorkSheetFunction もコードの書き方が若干異なりますが そのまま「ワークシート関数」が使用できます。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! ワークシート関数で対応できるのであれば、その方が簡単だと思いますが・・・ どうしてもVBAというコトになれば そのままワークシート関数を使うコトも可能です。 ↓の画像のような配置だとすると Sub Sample1() Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row With Range(Cells(2, "B"), Cells(lastRow, "B")) .Formula = "=VLOOKUP(A2,D:E,2,FALSE)" .Value = .Value End With End Sub てな方法があります。 いかにもVBAらしくやると Sub Sample2() Dim i As Long, c As Range For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row Set c = Range("D:D").Find(what:=Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then Cells(i, "B") = c.Offset(0, 1) End If Next i End Sub という方法もありますが、データ量が多い場合は 極力ループさせない方が良いと思います。m(_ _)m
- High_Score
- ベストアンサー率25% (45/176)
反則ですが、VBAでVlookupを使用出来ます。 WorksheetFunction.VLookup
お礼
ご回答ありがとうございます。 >反則ですが 反則というのは、できれば使用しない方が良いということでしょうか?
お礼
ご回答ありがとうございます。 >ワークシート関数 というのは、何でしょうか? VBAでその関数を記述できるのでしょうか? 恐れ入りますが、よろしくお願いします。