質問: 【excelvba】vlookupの方法について。 《全体の仕様(今回の質問に関連する箇所のみ)》 1)作業列にある2桁の数字の頭に「1」を付加して「1xx」という3桁の数字にし、d列にコピーする。 2)その3桁の数字をキーとし、別ファイルの「a列:キー / c列:商品名」という一覧からvlookupで商品名をe列に表示させたい。 1)に関しては、過去にこのように質問させて頂きました。 http://oshiete1.goo.ne.jp/qa3976946.html マクロでvlookupを使うのは初めてでして、2のロジックの考え方について、迷っています。 まず、キーとなる数字を編集してから、一番上の行~最終行にかけて、一気にvlookupをかけた方がよいのでしょうか? それともループの中で1行編集するごとに、vlookup関数をキー列の隣に入れていった方がよいのでしょうか? 処理が早い方、且つできればソースがシンプルな方(当方vbaはかなり初心者です...)は、どちらの考え方になるのでしょうか? (なお、キーとなる3桁の数字は、編集後は文字列扱いになっていましたが、それを関数で数字に直すのは、自力でなんとかできました)
回答: こんにちは。 結論的なものではありませんが、一応、ここを検索してみると分かりますが、マクロで、vlookupは、あまり意味がないのです。特に、はっきりとした理由ではないのですが、引数として、rangeオブジェクトの範囲を常に入れておく入れたりしても、vlookupでは、途中で面倒になってしまうのです。 a1:c10 a b c あ 1 11 い 2 12 う 3 13 え 4 14 お 5 15 か 6 16 き 7 17 く 8 18 け 9 19 こ 10 20 e い あ う 'vlookup 関数を使わないで、検索する方法 sub test1() dim i as variant dim c as variant dim mydata as range set mydata = range("a1:c10") 'application.screenupdating = false for each c in range("e1", range("e65536").end(xlup)) i = application.match(c.value, mydata.columns(1), 0) if not iserror(i) then 'f 列に出力する c.offset(, 1).value = mydata.cells(i, 3).value end if next c 'application.screenupdating = true set mydata = nothing end sub それから、 <1>まず、キーとなる数字を編集してから、一番上の行~最終行にかけて、一気にvlookupをかけた方がよいのでしょうか? <2>それともループの中で1行編集するごとに、vlookup関数をキー列の隣に入れていった方がよいのでしょうか? vlookup を使うのは別として、ループの中で1行ごとにほうが、コードとしては分かりやすいかと思います。 マクロの処理を速くする方法は、 application.screenupdating = false 'セルにアクセスするコードを入れる application.screenupdating = true