Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11807 / 13646 ツリー ←次へ | 前へ→

【14018】VBAとエクセルマクロの速度 ヒロ 04/5/18(火) 16:44 質問[未読]
【14020】Re:VBAとエクセルマクロの速度 Asaki 04/5/18(火) 16:49 発言[未読]
【14022】Re:VBAとエクセルマクロの速度 ヒロ 04/5/18(火) 17:01 質問[未読]
【14023】Re:VBAとエクセルマクロの速度 ちゃっぴ 04/5/18(火) 17:04 発言[未読]
【14025】Re:VBAとエクセルマクロの速度 ヒロ 04/5/18(火) 17:16 質問[未読]
【14027】Re:VBAとエクセルマクロの速度 IROC 04/5/18(火) 17:53 回答[未読]
【14034】Re:VBAとエクセルマクロの速度 ヒロ 04/5/18(火) 20:15 お礼[未読]

【14018】VBAとエクセルマクロの速度
質問  ヒロ  - 04/5/18(火) 16:44 -

引用なし
パスワード
   マスターシートに
AAA | 100 | aaa
BBB | 200 | bbb
CCC | 150 | ccc
.
.
というデータがあり、マッチングしたいシートに
BBB | ??? | ???
AAA | ??? | ???
.
.
という表があり、???の部分のデータをマスターシートから
引っ張ってきているのですが、
VBAのFind関数で引っ張ってきたところ、件数が多かったために
かなりの時間がかかってしまいました。
エクセルのマクロのVLOOKUPに変更したところ、かなり改善された気がします。

VBAとマクロで同じ処理が出来る場合、処理的にはマクロの方が速いのでしょうか。
今まで、エクセルのマクロはほとんど使ってこなかったのですが
マクロの方が高速であるのなら、今後マクロを覚えていこうと思ってますが
関数によっても違いがあるのでしょうか。

【14020】Re:VBAとエクセルマクロの速度
発言  Asaki  - 04/5/18(火) 16:49 -

引用なし
パスワード
   こんにちは。

そもそも、
VBA = マクロ
ですが。

【14022】Re:VBAとエクセルマクロの速度
質問  ヒロ  - 04/5/18(火) 17:01 -

引用なし
パスワード
   すみません。まだエクセルをさわりはじめたところなので
認識が間違っていたようです。

VLOOKUP関数のように、セルに直接埋め込む関数と
VisualBasicEditorでプログラム的に書く関数は
扱いは同じなのでしょうか。
Editorでのプログラムに、セルに書き込む関数を
組み込もうとするとエラーがでてしまったのですが。

【14023】Re:VBAとエクセルマクロの速度
発言  ちゃっぴ  - 04/5/18(火) 17:04 -

引用なし
パスワード
   マッチングアルゴリズムにもよるのでは?

単純なFindだと見つからない場合、対象セルをすべてループするので
冷静になって考えればわかるかと思いますが・・・

【14025】Re:VBAとエクセルマクロの速度
質問  ヒロ  - 04/5/18(火) 17:16 -

引用なし
パスワード
   Find関数とVLOOKUPでは、内部処理が違うということでしょうか。

セルに値をコピーするのが遅いような感じがしましたので
VLOOKUP等で処理する方が高速なのではと思ったのですが
もうすこしいろいろ試して見ます。

【14027】Re:VBAとエクセルマクロの速度
回答  IROC  - 04/5/18(火) 17:53 -

引用なし
パスワード
   VBAの関数とワークシート関数は別物です。

ましてVBAのFindメソッドに相当する一般機能は、「検索」です。
この場合の比較自体が間違いです。

VLOOKUPのVBAとなると、worksheetfunction を用いて、
VBAのコード中で、VLOOKUPを用いる方法になります。


セルの数や、数式の使い方によって、
VBAが速いか、一般機能(数式)が速いか異なります。
つまり、対象によって、何が最善かは試さないと分かりません。

データ件数が、5万件くらいあって、
そのようなシートが、いくつもあって、
シート間で、数式が参照していたりすると、
「シートの再計算」させるだけでも、とても時間が掛かります。
しかし、少ない範囲なら数式の方が速いですし、
ファイルサイズも少なくて済みます。

それに、VBAだと、
プログラムコード自体に改善の余地があることもありますし、
数式でも、シート上のデータのまとめ方や
数式の作り方で変わってきます。

速度を考えるなら
数式と、VBAを上手く使い分けて、作るのが理想的かもしれませんが、
数式は「保護」しないと不安でしょうし、使いやすさを損なってまで
速度を重視しないことは多いです。

先ほど書いたように、
VBAのなかで使用できるワークシート関数もありますし、
一時的に数式をセルに入力して計算させて、
そのあとセルの数式をクリアするような事も出来ます。

たいていの場合、
作り易さや、あとで自分が見たときの分かりやすさ、
仕様変更時の修正のし易さ等を重視するのが良いかと思います。

【14034】Re:VBAとエクセルマクロの速度
お礼  ヒロ  - 04/5/18(火) 20:15 -

引用なし
パスワード
   ご返答ありがとうございます。
VBAで処理するか、セルに埋め込むかは、いろいろやってみつつ
どちらが効率がいいかを検討して決めたいと思います。

コピーする行が2万行あり、一行ずつマッチングしてコピーしていたのですが
コピーするときにコピー元のシートをActivateしてデータをコピーして
コピー先のシートをまたActivateしてコピー先のセルを選択してと
シートをいったりきたりしていたのが、処理が重くなっている原因でした。
シートをアクティブにせずにコピーしたところ、半分以下の時間で
すむようになりました。

お騒がせしました。

11807 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free