• ベストアンサー

EXCELマクロ VLOOKUPと列の挿入

こんにちは。 以前、他のサイトで= VLOOKUP関数を使ってコードの右横の列にマスタを読みにいった結果を表示させる=というマクロを組んだ場合、 列の挿入(私の場合column(A:A)を使う)をするのですが、 メモリを使うので、仕様を考え直したほうがよい、という アドバイスをいただきましたが、全列の挿入をしないで どうする方法があるでしょうか、教えてください。 P.S.B列全部選択という記録マクロのほうが正確で、簡単と思うのはよくないのでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >記録マクロを公開すること自体、Wendy02さん他みなさんに、失礼にあたるのでは...という思いです。 そんなことはありません。こちらは、解決の糸口になる材料が多ければ多いほどよいのです。今の範囲では、こちらは想像を巡らして書いているので、本来なら、出来れば、一回で済ませられるのが、ベストなのです。 >VLOOKUP関数をB列全体に貼付け、 これは、やめたほうがよいです。Vlookup関数などは、列全体に貼り付けると、ひじょうに動きが鈍くなります。無駄も多いです。メモリに関していうなら、これは、正しいです。 >コピー&形式を選択で”値”として貼付をするという記録マクロです。 今のままでは、ご希望にそったものは出来ないとは思いますが、以下のサンプルをみていただいて、改良してみてください。Vlookup 自体を使うアイデアは、とてもよいのですが、それをマクロの中で処理することです。 Sub VLookupMacro()  Dim rng As Range, myValue As Variant, i As Long  With Worksheets("Sheet1") '書き込みするシート   .Columns(2).Insert 'B列挿入   Set rng = Worksheets("マスタ").Columns("A:D") '検索範囲   Application.ScreenUpdating = False   On Error Resume Next   For i = 1 To .Range("A1", .Range("A65536").End(xlUp)).Rows.Count    myValue = WorksheetFunction.VLookup(.Cells(i, 1).Value, rng, 2, 0)    'エラーが発生した時の値のクリア    If Err > 0 Then     Err.Clear: myValue = ""    End If    .Cells(i, 2).Value = myValue '値の書き込み   Next i   On Error GoTo 0   Application.ScreenUpdating = True   Set rng = Nothing  End With End Sub

tabtab9
質問者

お礼

ありがとうございました。 マクロを実行して、結果を先に見ることで、 Wendy02のマクロの意味をひとつひとつ理解したいと思います。 非常に勉強になると思います。 ありがとうございました。 また、わからないところがでてきたら、お尋ねします。 そのときは、よろしくお願いいたします。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >データがあったときは、vlookup >との関係で挿入はやっぱりだめなのでしょうか? Vlookup 自体は、まったく関係ないです。 列の挿入と行の挿入では、 1/65536 と 1/256 の違いで、列の挿入で1/256 で、繰り返し行えば、データの入っている列が押し出される可能性があるということです。 おそらくは、あるレベル以上の人は、そのようなコードは、書かないに違いないと思うだけです。 コードと、そのコードの目的の具体的情報がないままでは、良い悪いはいえません。コードを公開するのが好まれないなら、後は、しばらく使ってみるだけではありませんか?

tabtab9
質問者

補足

Wendy02さん、すみません。 >コードを公開するのが好まれないなら、 は、無いです。 私はいつも記録マクロを使いますが、データ自体、例えば A列にコードしかなく、そのコードの対応は、シート[マ スタ]に表としてあります。 そういう場合、B列全体を挿入であけて(B列に既存のデ ータがある場合です)、B列にVLOOKUP関数で表示させま す。そのVLOOKUP関数をB列全体に貼付け、さらにコピー &形式を選択で”値”として貼付をするという記録マク ロです。 記録マクロを公開すること自体、Wendy02さん他みなさ んに、失礼にあたるのでは...という思いです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 >列の挿入(私の場合column(A:A)を使う)をするのですが、メモリを使うので、 実際に、列を挿入するから「メモリを使う」でしたら、疑問に感じるのですが、列全体の挿入のロジックというのは、挿入先の右側の列に対して、エラーが発生しやすいこともあり、私もあまり関心しません。がしかし、1セルに対する挿入に関しても、エラー発生率が減るだけで結果的には同じです。 例:  ActiveCell.Insert Shift:=xlToRight Column(A:A) が、メモリを使うという意味でしたら、それは誤解です。 正式にはなんと言うのかは知りませんが、セルにデータが入って、初めて、そこにメモリ負担が出てくるのであって、単に、Column(A:A)としても、特に、変化ありません。4万行でもデータが入れば、大きく違ってきます。 いずれにしても、コードを見せていただかないと、的確な回答はつかないと思います。

tabtab9
質問者

お礼

Wendy02さん、こんにちは。 誤解の部分ありましたです。 でも、2,000件程度の データがあったときは、vlookup との関係で挿入はやっぱりだめなのでしょうか?

関連するQ&A