• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL2002で、VBAを使い、関数計算を簡略化したい)

EXCEL2002でVBAを使って関数計算を簡略化する方法

このQ&Aのポイント
  • EXCEL2002で、VBAを使って関数計算を簡略化する方法を教えてください。
  • 225個のセルの数値がリアルタイムで可変し、合算した後24.293で除算する計算を恒常的に行いたいです。EXCEL2002の負荷を減らすために、VBAを使用してスマートなプログラムを作成したいです。
  • VBAを使って条件分岐とループを組み合わせ、エンドレスに計算を続ける方法を教えてください。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

> =COUNTIF(K15:K49,O5:O49,S5:S49,">0") =COUNTIF(K15:K49,">0") + COUNTIF(O5:O49,">0") + COUNTIF(S5:S49,">0") が、妥当な式かと思います。 >今回の場合は、★VBAは、EXCELの自動計算より、OSへの負荷が、絶対に少ない筈で、であるからして VBAが動作する事で、エクセル内部ではVBAを実行するためのインタープリンタが動き始めます。 常にコードを解析しながらプログラムを動作させるので、VBAが実行していない時よりもCPUに負荷が掛かります。 セルに記入された式や関数は、エクセルの機能で自動的に参照されますが、VBAで記述した場合はインタープリンタが間に入ってエクセルのメモリと値のやりとりを行ってVBAに戻します。 そのため、エクセルのセルで行う計算とは実行速度が異なってしまいます。 下記はVBAの基本的な高速化テクニックが解説されたページです。 プログラムの記述方法の僅かな違いだけで実行速度が変化しますが、どのように記述してもエクセルの関数並の速度でシート上の値をチェックする事は出来ません。 (11. セルを配列に入れる 参考) http://www.officetanaka.net/excel/vba/speed/index.htm

TRADKING
質問者

お礼

 御回答有難う御座います。  前回も、このように、御紹介頂いた、たいへん貴重なリンクを、お気に入りに入れて、VBAのプログラムを考える度に、参考にさせて頂いております。  毎回毎回、たいへんタメになるリンクの御提示、誠に有難う御座います。痛み入ります。  理解を助ける「周辺の知識」についても、触れた"十全な説明"が、本当に、理解を深めてくれます。  これからも、どうぞ、"初学者"にとって、優しいhana-hana3さんでい続けてください!  毎回、長文で、このように"懇切丁寧"に、御答え頂き、有難う御座いました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>どうぞ、良い御考えを、教えてください。 (設問の条件が全く理解できませんが・・・) はっきり言ってVBAで行うよりもEXCELの自動計算で行う方が遙かに負荷は少ないものです。 ましてループさせたらCPU負荷もかなりの物になるでしょう。 (それこそ他の作業は何もできません) 集計方法を考え直すしか無いと思います。

TRADKING
質問者

お礼

 いち早い回答、誠に有難う御座います。 hana-hana3さんには、以前にも、一角ならぬお世話になりました。また、再びこうして、御答え頂けるたと言うことであり、本当に有難う御座います。  前回は、たいへん解りやすく、大変ご丁寧な回答により、理解が深まりました。  本当に有難う御座います。  今回も、このように、御気に掛けて下さり、深く感謝致します。 >はっきり言ってVBAで行うよりもEXCELの自動計算で行う方が遙かに負荷は少ないものです。    私は、何ゆえ、初学者なもので、誤解や、思い込みが多いようです。誠に申し訳ありません。  「条件の設定」自体、=(SUM($L$5:$L$229))/24.293 以外には、ないものですから、そういった場合は、まさしく、 >EXCELの自動計算で行う方が遙かに負荷は少ないもの なのですね。とても勉強になりました。  わざわざ、"難しく考える必要"がなかったところで、熟考していました。  その後、教示を仰いだり、購入した書籍により、よく勉強したつもりなのですが、やはり、促成栽培であるが故の「机上の学問」の為、私の知識は、何れも"俯瞰による全体の見渡し"が足りず、バランスを欠くようです。こうしたところで、よく躓きます。  今回の場合は、★VBAは、EXCELの自動計算より、OSへの負荷が、絶対に少ない筈で、であるからして、その仮定に立てば、現在の "高負荷な状態"は、改善される筈という考えが、一方的に"先に立ち過ぎました"。  また、もう一度、よく勉強し直します。  今回も前回同様、誠に有難う御座いました。

TRADKING
質問者

補足

 もし、御時間が許すのであれば、お答え頂けると、たいへん助かるのですが‥‥‥‥‥‥‥‥。  上記の質問とは、直接は関係無いのかもしれないのですが、派生した関連質問という事で御願いします。  =COUNTIF(K15:K49,O5:O49,S5:S49,">0") ワークシート上の条件により、やむを得ず、セル範囲の指定を、いわゆる「飛び地」で指定しないとならないのですが、実際に、このように指定すると、ヘルプのエラー表示では、  セル範囲の指定にコロンを使用する セル範囲への参照を指定するときは、先頭のセルへのセル参照と末尾のセルへのセル参照との間にコロン (:) を入力します。  と出てしまい、"事実上"「飛び地」での指定はできないのですが、"何か良い解決法はないでしょうか"?  また、再び御答え頂けないでしょうか? 伏して、御願い申し上げます。

すると、全ての回答が全文表示されます。

関連するQ&A