No.1ベストアンサー
- 回答日時:
こんばんは
VBAの場合、たしか、グローバル変数はExcelを閉じるまで解放されないと思いました。
解放がどのような意味なのか少し分からないのですが、
オブジェクト型なら Nothingを代入すればNothingとなりますが
代入しなければ、変数に代入されたオブジェクトは維持されます。
Module1に
Option Explicit
Public buf As Range
Sub test1()
Set buf = Range("A1")
End Sub
Module2に
Option Explicit
Sub test2()
MsgBox buf.Value
Set buf = Nothing
End Sub
test1を実行後 test2を実行
A1セルの値が表示される
続けてもう一度test2を実行すると
91エラー
これは Set buf = Nothing で オブジェクトがNothingになった為
(これを解放と言う場合は解放されたことになります)
Set buf = Nothingを削除またはコメントアウトして
test1を実行後 test2を実行
A1セルの値が表示される
続けてもう一度test2を実行すると
A1セルの値が表示される
つまり、End Subでは buf = Nothingと成らないです
これがプロシージャレベルですとEnd Subでbufの値は消えます
モジュールレベルですと他のモジュールからは使えませんが
End Subでは消えず、オブジェクト型の場合、set buf = Nothingで代入するか閉じるまで、対象のモジュールでは維持されます。
解放と言うキーワードでオブジェクト型としましたが、Public変数は宣言でメモリ確保(予約)されているように思います。
メモリ解放すると言うイメージの場合、プロシージャレベルで宣言する必要があるのでは無いかと思います。
私的なまとめ
宣言セクションで変数宣言すると閉じるまでメモリ確保(予約)されている
プロシージャ内で変数宣言すると実行時のみメモリ確保されEnd Subで解放される。
間違いがあるかも知れませんが、独学趣味レベルの認識です。
違ってたら教えてくださいお願いします。
No.2
- 回答日時:
モジュール内のグローバル変数は、Excelのブックが閉じられないと解放されません。
値を初期化したいなどがあるなら自力で行う必要があります。
クラスやフォーム内のインスタンス変数は、インスタンスを破棄した時点で解放されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) VBAについて教えてください 4 2022/11/10 12:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Excel(エクセル) 重複したデータ(空白は除く)のVBA表記について 4 2022/08/15 07:28
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
全ての変数を一気にリセットする方法はありますか?
PowerPoint(パワーポイント)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
EXCELのVBAで作業ファイルを閉じてもメモリの解放をしなくて困っています
Excel(エクセル)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
7
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
8
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
9
エクセルでエラーが出て困っています。
Excel(エクセル)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
VBAで「致命的なエラー」が出ました。どのくらい致命的なんでしょうか?
Access(アクセス)
-
12
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
13
UserForm1.Showでエラーになります。
工学
-
14
excel/vba/public変数
その他(Microsoft Office)
-
15
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
16
EXCEL VBA マクロ 実行する度に処理速度がどんどん遅くなる原因が知りたい
Excel(エクセル)
-
17
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
18
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
19
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
20
Excel VBAが徐々に遅くなる
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pthread_cond_waitとptherad_co...
-
VBA public変数はどのようなこ...
-
GetNextWindowがDLLファイルUse...
-
プロシージャをまたいて変数を...
-
VB6.0の正規表現を使って、文字...
-
【VB6.0】 あるフォームから他...
-
C#のループでtextboxに値を入れ...
-
二点の座標から距離や角度を求...
-
VB.NETでのイベントの途中終了
-
エクセルVBAでテキストボッ...
-
C言語のサフィックスについて
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
-
VC++ (byte)(col & 0xFF) の意味
-
Pythonでのstrip()とsplit()の...
-
perlによるxmlファイルの取得
-
sublimit textっていうエディタ...
-
レコードセットにnullの場合
-
C言語で10行10列の行列式の値を...
-
タイムアウトする仕組みを作りたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA public変数はどのようなこ...
-
演奏記号の・・・・
-
GetNextWindowがDLLファイルUse...
-
VB6.0の正規表現を使って、文字...
-
マクロ 条件式
-
Excel VBA: private sub 内の...
-
VBA 再帰について
-
フォルダ内にさらにフォルダが...
-
プロキシでキャッシュされる/...
-
上付文字と下付文字について(D...
-
分割コンパイルの方法がわかり...
-
プロシージャをまたいて変数を...
-
ファイルパスの変換方法
-
slapd再起動時にエラー
-
sub-paragraphとsub-sub-paragraph
-
pthread_cond_waitとptherad_co...
-
三項でたとえば交換って
-
C#のループでtextboxに値を入れ...
-
VBAでcallで呼び出したsubを終...
-
他のフォームから別のフォーム...
おすすめ情報