• ベストアンサー

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でする場合、どのように書けばいいのでしょうか? よろしくお願いします

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

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

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 のようになります。 あくまで一例です。

service_lu
質問者

お礼

qualheartさん、ありがとうございます! ぐるぐる回す書き方を勉強したかったのですが、 説明まで書いていただき、大変、勉強になります。 どうも、ありがとう!

その他の回答 (3)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

VBA内でワークシート関数を使用するには、WorksheetFunctionを介することで可能になります。そうすれば、ぐるぐるまわさなくても1行で済みます。 (詳細はヘルプの「Visual Basic でワークシート関数を使用する」を参照) <例> myVar = Application.WorksheetFunction.VLookup("A2", "A2:B5", 2, 0) MsgBox myVar 例ではシート指定を省略してますが、対象シートを指定してください。 私の環境では、なぜかVlookupが取得できないので、確認はできませんが・・・ (オブジェクトに存在することは確認できるのですが、実行すると取得できない)

service_lu
質問者

お礼

fujillinさん ありがとうございます WorksheetFunctionを使うと1行で表現できるわけなんですね。 勉強になりました。 ありがとう!

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.3

ぐるぐる回す書き方ですね。 色々ありますよ。 例のように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)
回答No.1

エクセルマクロ(VBA)自動記録 http://excel.onushi.com/macro/auto.htm 数式を入れたいのであれば記録を取ってみるのも参考になるかもです。

service_lu
質問者

お礼

n-jun さん、ありがとうございます。 自動記録も参考にして勉強してみます。

関連するQ&A