質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

1235閲覧

エクセルVBAでグローバル変数を使うと速くなりますか?

qqfsdfsafd

総合スコア599

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2021/10/08 09:09

編集2021/10/08 23:54

Excel VBAで超大量にループしまくる関数を1000回くらい呼びまくっています。
グローバル変数を使うと速くなりますか?

追記
今、1年365日分のデータをセルから配列変数に代入して2重ループする関数を1000回くらい呼んでます。ユーザーからちょっと重いと言われており、高速化したいのですが、計算結果をグローバル変数に保持して、2重ループの前で条件判定して不要な2重ループを通る回数を減らすと多少は速くなるのでしょうか?
今、ファイルを開くときに10秒くらい、セルの値を変更したときの再計算に2秒くらい掛かっています。

ちなみに、計算結果を空いているセルに書き込んで、2重ループの計算が不要なときはそのセルの値を参照するように修正してみたところ、速くなるどころかむしろ遅くなった上に他の人がソースコードを見たらワケわからんプログラムになってしまったので、そのやり方は中止しました。その修正とテストで半日無駄にしてしまいました。

追記
エクセルは再計算不要なときは自動的に再計算をスキップしているような気がします。
再計算して欲しいときでも勝手に再計算しないで値が変わらないこともあるし、その辺りのエクセルの仕様がよくわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/10/08 21:44

どんなコードでどういうパフォーマンスが出てるか知らないですが、やってみればわかるのでは。
m.ts10806

2021/10/09 00:47

あぁ解決する気なしの人ですね。赤の他人にアドバイス求めるのにコードなしって無理がある。もうお金払ってやってもらいな。通報はしとく。
guest

回答1

0

グローバル変数を使ったところで、
高速化は見込めません。

1)ロジックの最適化
2)セルの読み書きを減らす。
3)ファイルを読み取り専用で開く
4)システム全体のデータの保持のしかたの再検討

ぱっと思いつくのはこの辺でしょうか?

今、1年365日分のデータをセルから配列変数に代入して2重ループする関数を1000回くらい呼んでます。

これだけでは、なにもわかりません。
また、動作テストで比較しなければ、
結論付けできません。
再計算にしても、やりかたによっては遅くなったり、
速くなったりします。(コードを見ないとアドバイスできません)

基本、VBAはそもそも遅いので、高速化には限界があるかと思います。
エクセルに出来ることは、VBAで自作するよりは、
エクセルに任せた方が速いかと思います。
特に大量のループは遅い。1000回は全然少ないほうかと思いますが、
1000個のファイルを開いたり閉じたりはなかなか時間がかかるので、
1年分を1ファイルにまとめて管理するとよいかと思います。
それができないなら、エクセル君の守備範囲外かも。
他のソフトの使用も検討。

いずれにしても、手動で処理するよりは劇的に速いので、
いいとこで折り合いをつけないと、
なんでもかんでもパソコンだから瞬時にっていう要求もどうかと思います。
もう少し、プログラマー側で出来ることはありそうな気はしますが。

あとは、マシンのスペックの高いものを使うとか。。。。
7万円くらいのノートパソコンで、瞬時を要求されても困るかも。。。。
モニター無しで20万円弱のものを。。。。
モニターも30インチ以上のものを使うと、仕事が楽になりますよ。
職人さんが道具にこだわるように、
パソコンをメインに使う仕事なら、それなりの道具が必要かと。

エクセル君に頼って速くなる例:
連番の入力
データの並び替え(VBAで書いたクイックソートとの比較)
大量の再計算(やり方次第)

フィルター系は遅いかも知れません。
が、何と何を比較するかの基準が違うかも^^;

投稿2021/10/09 06:12

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問