No.1ベストアンサー
- 回答日時:
>セルにアクセスせず配列を使え
セルを一個一個巡回しては値を記入し、また一個ずつセルを巡っては計算結果を取り出すみたいな事をしていると、確かにとても遅いです。
>シート中に沢山の計算式が複雑に絡み合っている
計算式を含むワークシートを仮想化するみたいな、そんな機能は残念ながらありません。
現実的には
○入力しなきゃならないセル(=計算式のインプットデータになるセル)に、一度にまとめて一斉に必要な値を投入する(できるようにセルの配置やインプットデータを工夫する)
○計算結果のセルをまとめて取得する(出来るように計算セルの配置を考える)
といった工夫をします。
>沢山のセルを参照した計算式が多数ある
VBAの中で数式をエミュレートして計算させる事も、やろうと思えばできます。が、ワークシートに計算させた方が早いです。
工夫代の中には、マクロでやろうとしている事を数式で実現できないか工夫するといったアプローチも含まれます。
No.3
- 回答日時:
配列や変数を使うというのは、
・同じセルを複数回参照する
とか
・マクロ処理の途中経過をいったんセルに入れる
とかいうことを避けるようにという意味合いです。
マクロ処理の最終結果をセルに入れるところはセルへのアクセスはどうしても必要ですから
配列を使ってセルへのアクセス回避はできません。
(No.1の回答のように、そもそもセルへのアクセス数が少なくなるように構成自体を見直すことができれば良いのですが)
> (Application.ScreenUpdating =False)はすでに使用していますが、残念ながら24時間以上かかってしまいます。
これは画面更新は止まりますが、セルを更新するたびに再計算は発生してしまいます。
セル更新の回数が多いのであれば、
処理の前に
Application.Calculation = xlCalculationManual
で自動計算を停止し、
処理が終わってから
Application.Calculate
で再計算、
Application.Calculation = xlCalculationAutomatic
で自動計算再開
すれば良いと思います。
【参考】
自動計算を止める
http://www.smilecolor.net/tips.php?id=ex&num=95
なるほどです。ですが残念ながら、そもそも”セルを更新するたびに再計算を行った結果を評価する” というプロセスを何度も行わなければいけない仕様となっておりますので、今回のプログラムに適用はむずかしいです。ありがとうございました。
No.2
- 回答日時:
>VBAを高速化するにはセルにアクセスせず配列を使えといいますが、
この場合は、セルはオブジェクトであり、値が変化すれば、画面が変化するので、一般的には速度が遅くなるわけで、Rangeオブジェクトの値を、配列変数に代入できれば速くはなります。しかし、思ったほどではありません。私の実験では、せいぜい、1万個~3万個ぐらいのセルに対しては有効だったという記憶があります。(現在はどうかは知りません)
>シート中に沢山の計算式が複雑に絡み合っている(沢山のセルを参照した計算式が多数ある)
ワークシートの反応が遅ければ、VBAで速くなることがある、という程度です。実際、ワークシートの方が速いかどうかは、数式次第ですね。ワークシートで配列を使う場合などは、VBAの方が速いです。何れにしても、画面の変化を止める(Application.ScreenUpdating =False)としていれば、そんなに大きく違わないはずです。
そんなにかわらないのですね なるほど。
(Application.ScreenUpdating =False)はすでに使用していますが、残念ながら24時間以上かかってしまいます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの数式について ブック内の別シートの値の含まれたセルの個数を集計したい 全シート一覧のシート 1 2022/07/21 19:28
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- その他(IT・Webサービス) 高速処理可能な表計算ソフトについて ExcelやGoogleスプレッドシートのような表計算ソフトで、 2 2023/04/29 16:06
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) エクセルのVBAで上の表の最下行を求める 4 2022/09/14 15:22
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ヘッダー
-
エクセルの使い方 1日=7時間45...
-
IF関数で、時間を条件にしたい...
-
エクセルで、時間の計算をした...
-
excel 参照しているセルに色が...
-
エクセルでの時間計算(2時間30...
-
エクセルで 足し算や割り算の...
-
AかBに入力があった時Cに反映、...
-
Excelの計算式内の文字列の一括...
-
計算結果が「0」のセルだけを「...
-
エクセルの計算結果が0になって...
-
エクセル・計算式をテキストデ...
-
EXCELの関数に関する質問です
-
エクセル 月数を0.5ヶ月単位で...
-
TEXTCALCの使い方
-
数式の計算結果により表示され...
-
エクセルで足し算と掛算を混ぜ...
-
エクセルで比率を計算
-
Excel 関数? 文字列に...
-
エクセル 1万時間を越える際の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数で、時間を条件にしたい...
-
ヘッダー
-
計算結果が「0」のセルだけを「...
-
エクセルの使い方 1日=7時間45...
-
エクセルで 足し算や割り算の...
-
エクセルで、時間の計算をした...
-
EXCELの関数に関する質問です
-
数式の計算結果により表示され...
-
エクセル・計算式をテキストデ...
-
Excelの計算式内の文字列の一括...
-
エクセルでの時間計算(2時間30...
-
excel 参照しているセルに色が...
-
エクセルの計算結果が0になって...
-
TEXTCALCの使い方
-
エクセルで足し算と掛算を混ぜ...
-
Excel 関数? 文字列に...
-
エクセル 月数を0.5ヶ月単位で...
-
エクセルで数値を50単位で切...
-
エクセル 1万時間を越える際の...
-
AかBに入力があった時Cに反映、...
おすすめ情報