|
はじめまして。
最近VBAにはまり出したにわかマクロ使いです。
一通り基礎は理解できてきたのですが、性能面でどうかな、と思ったので
質問させてください。
エクセルのVBAで以下のようなマクロを作ろうとしています。
☆Sheet1とSheet2の内容をマージしたものをSheet3に出力するマクロ
●それぞれのシートの内容(データは適当です)
Sheet1 Sheet2
ID 名前 スコア1 スコア2 ID 名前 所属
1 あ 20 30 1 あ 1組
2 い 20 30 2 い 2組
3 う 20 30 3 う 3組
4 え 20 30 4 え 4組
1 あ 20 30
2 い 20 30
3 う 20 30
Sheet1とSheet2の内容からIDをキーにして
以下のようなシートを作成する。
Sheet3
ID 名前 スコア1 スコア2 所属
1 あ 20 30 1組
2 い 20 30 2組
3 う 20 30 3組
4 え 20 30 4組
1 あ 20 30 1組
2 い 20 30 2組
3 う 20 30 3組
イメージ的には正規化の逆って感じです。
自分で考えたコードは
*************************************
for i = 1 to sheet1データ数
方法1.
for j = 1 to sheet2データ数
if worksheets("sheet1").cells(i,1).value = _
worksheets("sheet2").cells(j,1).value then
worksheets("sheet3").range("A" & i & ":D" & i) = _
worksheets("sheet1").range("A" & i & ":D" & i)
worksheets("sheet3").cells(i,5).value = _
worksheets("sheet2").cells(j,3)
end if
next j
方法2.
worksheets("sheet3").range("A" & i & ":D" & i) = _
worksheets("sheet1").range("A" & i & ":D" & i)
worksheets("sheet3").(i,5).calue = _
Application.worksheetfunction.vlookup( _
worksheets("sheet1").cells(i,1), _
worksheets("sheet2").usedrange,3,false)
next i
*************************************
です。一応動くことは動くのですが、データ件数が多く(4〜5万件)なるとループ回数が増えてしまって実行時間がとても長くなります。
これ以外でもっとスマートな方法などありましたら、
アドバイスしていただけないでしょうか。
よろしくお願いします。
|
|