Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : 指定なし)
変数とセル
投稿日時: 21/05/06 11:22:33
投稿者: manatsu

@変数ではなく、Aセルに値を格納しておき必要に応じて参照する ---- というような方法は「あり」でしょうか。「あり」とすると、@とAは併用させてもよいのですか?またどのような点に留意すべきでしょうか?
よろしくお願いいたします。

回答
投稿日時: 21/05/06 11:51:25
投稿者: sk

引用:
@変数ではなく、Aセルに値を格納しておき必要に応じて参照する
 ---- というような方法は「あり」でしょうか。

・その値を永続的に(そのブックに)保存しておく必要があるか。
 
・計算途中の値をユーザーに見られてもよいか(問題ないか)。
 
・どうしてもセルを変数代わりにしなければならない理由があるのか。
 
どのような意図に基づいてのご質問なのかが不明瞭ですが、
以上のような都合や事情によるのではないのでしょうか。

回答
投稿日時: 21/05/06 12:32:31
投稿者: simple

既にご指摘のとおりです。
 
アリです。
安全な情報格納場所としてMS社はワークシートを勧めています(下記参照)
 
昔の記事がリンク切れになっているので、下記のアーカイブを参照してください。
【Public 宣言された変数の有効期間】
http://web.archive.org/web/20090909235324/http://support.microsoft.com/kb/408871/ja

引用:
ある Office ドキュメントが VBA のマクロを含む場合、その中のモジュールに記述された Public 変数の値が有効である期間は、あるプロシージャの実行を開始し、そのプロシージャが "End Sub" で終了するまでの間のみです。
  
ほとんどの場合、プロシージャ終了後も値は保持されますが、意図しないタイミングで保持されていた Public 変数の値が破棄され、使えていた変数の値が突然使えなくなる場合があります。 そのため、Public 変数がアプリケーション終了時まで有効であることを期待する VBA マクロの実装は、推奨されません。
  
なお、モジュールの編集、プロジェクトの構造の変更、コンパイルエラーの発生、参照設定の変更、デザインモードへの切り替え、コントロールを削除して [元に戻す] を実行するなどのタイミングで変数が破棄される場合があります。 これは、そのタイミングでメモリ上に確保されている VBA の情報が破棄され、初期化を行ってから、その後の処理が実行されるためです。
  
補足 : この文書で説明する Public 変数とは、すべてのモジュール レベル変数および静的変数を指します。
【原因】
この動作は、VBA の仕様に基づく制限です。
  
【解決方法】
どのような状況でも変数の値を保持したい場合は、以下の方法を使用します。
Excel の場合 非表示にしたワークシートに値を記述します。

もちろん、いうまでもなく、すべてをワークシートに持てというわけではありません。
永続性に対する保証をどの程度考えるか、ということでしょう。

回答
投稿日時: 21/05/06 19:08:16
投稿者: meerkat

私も「あり」に1票です。
 
私の場合は、オペレータが簡単に書換えできた方が都合がいい
パラメータはセルに保存。
オペレータが変える必要ないパラメータは、プログラム内で定義
として運用しています。
 
ま、留意する点としては、パラメータの妥当性の判定とか、パラメータ
が消されたばあいの処理とかですかね・・・

投稿日時: 21/05/06 21:04:04
投稿者: manatsu

sk さん、simple さん、meerkat さん
回答ありがとうございます。
 
皆様「あり」ということですね。
変数が増え、ごちゃごちゃしてきて、セルに記述したほうが管理しやすいのではと思ったのです。でもセオリーとしてはどうなんだろうということで質問しました。
変数かセルか、処理の内容をはっきりさせ整理して、自分なりの基準をつくって使いわけていきたいと思います。
こんごともよろしくお願いします。