- ベストアンサー
VLOOKUP関数をVBAで書くには
EXCEL VBAの初心者です VLOOKUP関数をVBAで書きたいのですが、よくわかりません すいませんがどなたかご教授、願えないでしょうか? sheet1 sheet2 A B A B 名称 CD 名称 CD 滋賀県 25 滋賀県 25 京都府 26 大阪府 27 大阪府 27 兵庫県 28 兵庫県 28 sheet2のA列をキーにsheet1のA列と照合して sheet2のB列にsheet1で一致した行のB列をコピーする VLOOKUP関数を使うと、sheet2のB2は =IF($A2="","",VLOOKUP($A2,Sheet1!$A$2:$B$5,2,0)) としたら、25を得ることができました VBAでする場合、どのように書けばいいのでしょうか? よろしくお願いします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAの場合、関数を使うと言うより、動作そのものを考えればよいと思います。 1.Sheet2のA2の値を取得 2.Sheet1のA列のA2の値と一致するセルを探す 3.一致した場合その行のB列の値を取得する 4.取得した値をSheet2のB2に入力する 5.1~4を必要な行数繰り返し処理する これをVBにすると Sub Macro1() For n = 2 To 5 '処理するSheet2の行数範囲 a = Sheets("Sheet2").Cells(n, 1) 'aにA列の値を代入 For m = 2 To 5 '検索するSheet1の行数範囲 If Sheets("Sheet1").Cells(m, 1) = a Then 'Sheet2のA列の値とSheet1のA列が一致した場合 v = Sheets("Sheet1").Cells(m, 2) 'vにB列の値を代入 Sheets("Sheet2").Cells(n, 2).Value = v 'Sheet2のB列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub のようになります。 あくまで一例です。
その他の回答 (3)
- fujillin
- ベストアンサー率61% (1594/2576)
VBA内でワークシート関数を使用するには、WorksheetFunctionを介することで可能になります。そうすれば、ぐるぐるまわさなくても1行で済みます。 (詳細はヘルプの「Visual Basic でワークシート関数を使用する」を参照) <例> myVar = Application.WorksheetFunction.VLookup("A2", "A2:B5", 2, 0) MsgBox myVar 例ではシート指定を省略してますが、対象シートを指定してください。 私の環境では、なぜかVlookupが取得できないので、確認はできませんが・・・ (オブジェクトに存在することは確認できるのですが、実行すると取得できない)
お礼
fujillinさん ありがとうございます WorksheetFunctionを使うと1行で表現できるわけなんですね。 勉強になりました。 ありがとう!
- qualheart
- ベストアンサー率41% (1451/3486)
ぐるぐる回す書き方ですね。 色々ありますよ。 例のようにFor...Nextは特定の変数に対して数値を代入して繰り返し処理を行う場合に使用できます。数値をCells指定の行数や列数に代入すれば、行ごとや列ごとに繰り返し処理ができるパターンですね。 For n = 2 To 5 ~ Next それ以外には「Do...Loop」があります。 これは条件が真になるまで続けるループ処理です。 今回の場合に当てはめると Do While Sheets("Sheet2").Cells(n, 1) = "" ~ n = n + 1 Loop のようにSheet2のA列に空白が存在するまで繰り返す、というような処理をすることもできますね。 そのとき、Loopの最後の「n = n + 1」と書いておくことで、繰り返す度にnの値を1つずつ増し1行ずつループ処理するようにすることができます。 ご参考まで。
- n-jun
- ベストアンサー率33% (959/2873)
エクセルマクロ(VBA)自動記録 http://excel.onushi.com/macro/auto.htm 数式を入れたいのであれば記録を取ってみるのも参考になるかもです。
お礼
n-jun さん、ありがとうございます。 自動記録も参考にして勉強してみます。
お礼
qualheartさん、ありがとうございます! ぐるぐる回す書き方を勉強したかったのですが、 説明まで書いていただき、大変、勉強になります。 どうも、ありがとう!