Excelのフォームをモードレス表示する、閉じる、隠すVBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、フォームの作り方とタイトルの付け方、モードレス表示にするShowメソッドのvbModeless、フォームを閉じるUnloadメソッド、フォームを隠すHideメソッドの使い方などを解説。

» 2014年10月20日 18時00分 公開
[薬師寺国安PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


フォームに関する基本的なTips

 今回からフォームに関するTipsを数回に分けて解説していく。フォームに関しては、コントロールの使い方の解説がメインになるため、日常業務のどんな場面で利用できるかについては、あまり触れていない。

 その代わり「このコントロールを使用すれば、このようなことができる」という使い方の解説を行うので、「どのような場面でこのコントロールを使えば、業務の効率化が図れるか」は、各読者の皆さんに考えていただきたい。

フォームの作り方とフォームのタイトルの付け方

 初めは「フォームの作り方とフォームのタイトルの付け方」について解説する。

 まず、VBE(Visual Basic Editor)を起動し、VBEのメニューから[挿入]→[ユーザーフォーム]を選択する。すると、図1のようにフォームが表示される。マウスを右隅下に持っていてドラッグすると、フォームのサイズを自在に変更できる。

図1 フォーム画面が表示された

 次に、フォームの「UserForm1」と表示されているタイトルを変更してみよう。

 UserForm1のプロパティの中に[Caption]という項目がある。ここに「薬師寺国安事務所フォーム」と指定すると、図2のように「UserForm1」と表示されていた箇所が、「Caption」に指定した名称に変更される。

図2 UserForm1のプロパティから[Caption]を指定

 「背景色」を変更したい場合は、[BackColor]の項目を、フォームに「枠線」を表示したい場合は[BorderStyle]の項目を、「枠線の色」を変更したい場合は[BorderColor]の項目を変更すればいい。筆者の好みで変更したフォームは図3の通りだ。

図3 フォームの「背景色」「枠線」「枠線の色」を変更した

 以上がフォームの表示方法と各プロパティを設定する一例だ。読者の皆さん自身で、いろいろプロパティを変更し、どのようにフォームが変化するかを確認してほしい。

フォームをモードレス表示するShowメソッドのvbModeless

 次は、「フォームのモードレス表示」について解説する。

 通常フォームを表示させる場合は、Showメソッドを使う。このShowメソッドを使用すると、フォームが表示されている間はExcelの操作ができなくなる。しかし、フォームを「モードレス」という表示方法で表示させると、フォームが開いたままの状態でExcelの操作が可能になる。フォームのモードレス表示の書式は次の通りだ。

フォームのモードレス表示の書式

{オブジェクト}.Show vbModeless


 {オブジェクト}には対象となるUserFormオブジェクトを指定する。

 Excelのメニューから[挿入]→[図形]を選択し「角丸四角形」をシートに配置して、「フォームの表示」というボタンを配置しておく(図4)。

図4 「フォームの表示」ボタンを配置する

 では、実際にマクロを記述してみよう。

 まず、VBEのメニューから、[挿入]→[標準モジュール]と選択する。プロジェクトにModule1が追加されるので、Module1をダブルクリックして、表示されるエディター画面内にリスト1のコードを記述する。

Option Explicit
Sub フォームのモードレス表示()
  UserForm1.Show vbModeless
End Sub
リスト1 フォームを「モードレス」で表示するコード

 リスト1の3行目の通り、Showメソッドの後にvbModelessを追加するだけだ。

 このマクロを図4の「フォームの表示」ボタンに関連付け実行すると、図5のように表示される。図5を見ると分かるが、フォームが表示された状態で、Excelの操作が可能になっている。

図5 フォームが「モードレス」で開いた

フォームを閉じるUnloadメソッドとフォームを隠すHideメソッド

 最後に、開いたフォームの閉じ方と隠し方を解説する。それぞれの書式は次の通りだ。

フォームを閉じるUnloadメソッドの書式

Unload {オブジェクト}


フォームを隠すHideメソッドの書式

{オブジェクト}.Hide


 {オブジェクト}には対象となるUserFormオブジェクトを指定する。

 先にサンプルを紹介しておこう。図6のように三つのボタンを配置しており、それぞれのボタンをクリックすることで、フォームを表示したり、閉じたり、隠したりする。このサンプルを実際に操作する際には、必ず「フォームの表示」ボタンをクリックして、フォームを表示させてから他のボタンを試していただきたい。

図6 三つのボタンが配置されている

 「フォームの表示」ボタンに関連付けているマクロは、先に解説したリスト1だ。

 今回使用するフォーム上には、説明を分かりやすくするために「テキストボックス」コントロールを1個配置している「フォームの表示」ボタンで表示されたフォームのテキストボックスに、「薬師寺国安」と文字を入力した上でUnloadとHideを試し、それぞれの挙動の違いを検証する(図7参照)。

 「フォームを閉じる」と「フォームを隠す」のコードはリスト2になる。

Sub フォームを閉じる()
  Unload UserForm1
End Sub
Sub フォームを隠す()
  UserForm1.Hide
  MsgBox UserForm1.Caption & "を一時的に隠しました。再度[フォームの表示]ボタンをクリックしてください。"
End Sub
リスト2 「フォームを閉じる」コードと「フォームを隠す」コード

 「フォームを閉じる」場合は、Unload UserForm1と記述する。

 「フォームを隠す」では、Hideメソッドで隠す。隠した旨のメッセージを表示する。

 リスト2の、これら2つのプロシージャを図6の「フォームを閉じる」と「フォームを隠す」ボタンに関連付ける。

 フォーム上に配置した「テキストボックス」に、「薬師寺国安」と入力して、「フォームを閉じる」ボタンをクリックする。その後、「フォームの表示」をクリックすると、表示されたフォームの、「テキストボックス」内から「薬師寺国安」という文字は消えている。

 次に、「フォームの表示」でフォームを表示して、「テキストボックス」に同じように「薬師寺国安」と入力し、今度は「フォームを隠す」ボタンをクリックすると、リスト2で設定したメッセージが表示される。

 メッセージに従って、その後「フォームの表示」をクリックすると、今度は「テキストボックス」内に「薬師寺国安」と表示されたフォームが開く。この違いがUnloadとHideの違いだ。

図7 各ボタンをクリックして、フォームを閉じたり、隠したりしている

UnloadとHideの違いを覚えておこう

 今回はフォームに関するごく基本的なTipsを紹介した。直接業務には関係しないTipsのように思えるかもしれないが、この基本を知ることで、これ以降解説するフォームのTipsを理解しやすくなる。その意味でも、今回のTipsは重要だ。

 「フォームを閉じる」ではフォームは完全に終了し、メモリからも削除されるが、「フォームを隠す」では、フォーム自体は、メモリ上に残り終了はしていない。「ただ隠れているだけ」という点に注目していただきたい。フォームに入力したデータの表示を隠した後にも、再度利用したい場合などではHideメソッドを使用することになる。Unloadでは、入力したデータがリセットされてしまうので、注意してほしい。

著者プロフィール

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。