【VBA】ユーザーフォームを閉じる2つの方法 Unload と Hide の違い

目次

はじめに

VBAのユーザーフォームを閉じる際、Unload ステートメントと .Hide メソッドという、よく似た2つの方法があるのをご存知でしょうか?

どちらもフォームを画面から消すという点では同じですが、メモリ上の扱いやフォームの状態において、明確な違いがあります。この違いを理解しないまま使うと、「フォームに入力したはずの値が消えてしまった!」といった予期せぬ挙動の原因になります。

この記事では、UnloadHide のそれぞれの意味と、具体的な使い分けについて、分かりやすく解説します。


Unload: フォームを完全に終了させる

Unload は、ユーザーフォームをメモリから完全に破棄(解放)する命令です。

特徴

  • フォームインスタンスが完全に終了します。
  • フォーム上のテキストボックスやコンボボックスに入力された値は、すべて初期状態にリセットされます。
  • 次に同じフォームを表示するときは、全く新しい状態で表示されます。

どんなときに使う?

フォームでの作業が完全に終了し、入力内容を保持する必要がない場合に適しています。「OK」ボタンや「閉じる」ボタンのように、処理を完結させるときに使うのが一般的です。

サンプルコード

' --- MainFormという名前のユーザーフォームを想定 ---

' 「閉じる」ボタン(CloseButton)がクリックされたときの処理
Private Sub CloseButton_Click()
    ' フォームをメモリから完全にアンロードする
    Unload MainForm
End Sub

.Hide: フォームを一時的に非表示にする

.Hide は、ユーザーフォームを画面上で見えなくするだけで、メモリ上には存在し続けます。

特徴

  • フォームはメモリ上に保持されたまま、非表示になるだけです。
  • フォーム上のテキストボックスなどに入力された値は、そのまま保持されます。
  • 次に .Show メソッドで再表示すると、前回の状態のまま表示されます。

どんなときに使う?

フォームでの入力作業の途中で、一時的にExcelシートの操作をしたい場合などに適しています。「一時的に隠す」ボタンや、マルチステップのフォームで前の画面に戻る際などに便利です。

サンプルコード

' --- MainFormという名前のユーザーフォームを想定 ---

' 「一時的に隠す」ボタン(HideButton)がクリックされたときの処理
Private Sub HideButton_Click()
    ' フォームを非表示にするだけ(値は保持される)
    MainForm.Hide
End Sub

' フォームを再表示するためのマクロ(標準モジュールに記述)
Sub ReShowForm()
    ' 非表示になっているフォームを再表示
    MainForm.Show
End Sub

UnloadHide の使い分けまとめ

項目Unload.Hide
目的完全に終了させる一時的に非表示にする
メモリ解放される保持される
入力値破棄される(リセット)保持される
主な用途OK, 閉じる, キャンセルシート操作, 一時退避

基本的には、フォームの役目が完全に終わったときは Unload を使い、明確な意図がない限り .Hide は使わない方が、意図しない値の保持を防ぎ、メモリ管理の観点からも安全です。


まとめ

今回は、ユーザーフォームを閉じるための Unload.Hide という2つの方法の違いについて解説しました。

  • Unload: 全てをリセットして完全に終了。
  • .Hide: 状態を維持したまま一時的に隠す。

この2つの違いを正しく理解し、場面に応じて適切に使い分けることで、より安定的でユーザーフレンドリーなVBAツールを作成することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次