GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−ユーザーフォームを使いこなす
  UserForm(ユーザーフォーム)を利用してみよう!
 
■ UserForm(ユーザーフォーム)を利用しよう


ExcelVBAの開発で、避けて通れないのがUserForm(ユーザーフォーム)の利用です。

Excelにはワークシートがあるため、ワークシートを入力フォーム代りに使用することも可能です。しかし、本格的なVBAアプリケーションを構築する場合、ワークシートの入力では限界があります。
ユーザーフォームのもつ、膨大なイベント処理、そして各コントロールのもつ多彩なメソッドとプロパティ。Excelのユーザーフォームは、VBのフォームに引けを取らない機能と拡張性を持っています。

今回から数回にわたって、ExcelVBAからユーザーフォームを利用する方法を解説したいと思います。入門編でも、ほんの少しユーザーフォームについて触れましたが、実際のアプリケーション開発には全然不足しています。

ここでは、各コントロールの機能を詳細にサンプルを用いて説明していきます。ぜひ、あなたのアプリケーション開発にお役立てください。
※ なおクラスモジュールを用いたコントロール配列については、ここではふれません。

UserFormユーザーフォームの表示

ユーザーフォームの追加の仕方は、入門編を参考にしてください。
標準モジュールのプロシージャより"ユーザーフォーム名.Show"の形式で呼び出します。
(例)
  UserForm1.Show
この例ではオブジェクト名"UserForm1"のフォームを表示させます。

UserFormユーザーフォームを閉じる

ユーザーフォームを閉じるには、ユーザーフォーム右上の「X」ボタン押下でもよいですが、終了用のCommandButtonコントロールのClickイベントに終了処理を記述しても、終了できます。
(例)
  Private Sub CommandButton1_Click()
    Unload Me
  End Sub
この例ではCommandButton1コントロールをクリックすると、自身のフォームを閉じます。

※ ここで、気をつけてほしいのが「Show」で呼び出しているのに「Unload」していることです。
実は、Showメソッドで呼び出したとき、UserForm1は自動的にメモリ上に「Load」されています。Unloadステートメントでメモリ上から削除する際には当然、画面上からも消えます。ですので「Hide」する必要がないのです。
(例)
  Load UserForm1 'この時点で、UserForm1のインスタンスがメモリに読み込まれました。
  UserForm1.Show 'この時点で、UserForm1が表示されました。
  UserForm1.Hide 'この時点で、UserForm1が非表示になりました。
  Unload UserForm1 'この時点で、UserForm1のインスタンスがメモリから解放されました。
この例では、UserForm1をメモリに読み込み、表示したのち、非表示にし、メモリから削除しています。
※ UserForm_Initializeイベントは、UserFormをロードした時点で実行されます。

UserFormオブジェクトの表示方法

Showメソッドには引数があります。省略すると既定値である1-vbModalが適用され、モーダルでUserFormを表示します。0-vbModelessを指定すると、モードレスでUserFormを表示し、ワークシートの編集などが行えます。

モードレスで表示させた場合、モーダルと違ってコードの実行がShowメソッドのところで中断されずに、継続して実行されてしまいますので注意が必要です。これを回避するには、グローバル変数でUserFormの終了時にTRUEを返すようなBoolean型の変数を作成します。Showメソッド直下にDo〜Loopでループ処理をし、UserForm終了まで処理をウェイトさせることができます。
(例)
' モジュール宣言部に記述ここから −−−−−−−−−−−−−−−−−−−−−−−−−−
  Public MyBln As Boolean
' モジュール宣言部に記述ここまで −−−−−−−−−−−−−−−−−−−−−−−−−−

' 標準モジュールに記述ここから −−−−−−−−−−−−−−−−−−−−−−−−−−−
  Sub test()
    MyBln = False
    UserForm1.Show vbModeless
      Do
        DoEvents
      Loop Until MyBln
    MsgBox "UserForm1 Ended"
  End Sub
' 標準モジュールに記述ここまで −−−−−−−−−−−−−−−−−−−−−−−−−−−

' フォームモジュールに記述ここから −−−−−−−−−−−−−−−−−−−−−−−−−
  Private Sub UserForm_Terminate()
    MyBln = True
  End Sub
' フォームモジュールに記述ここまで −−−−−−−−−−−−−−−−−−−−−−−−−
 
この例では、UserForm1をモードレスで表示させた後、Do〜Loopでループ処理を繰り返します。UserForm1を終了させた時点で、グローバル変数のMyBlnにTrueが返り、ループ処理を抜け、"UserForm1 Ended"のメッセージを表示します。
※ Excel97では、ユーザーフォームをモードレスで表示することはできません。

UserFormユーザーフォームを印刷する

PrintFormメソッドを使用します。ユーザーフォームオブジェクトに表示している全てのオブジェクトのイメージをプリンタに送ります。
(例)
  Private Sub UserForm_Click()
    UserForm1.PrintForm
  End Sub
この例では、UserForm1をClickすると、表示しているUserForm1のイメージをビット単位でプリンタより出力します。



UserFormユーザーフォームとは異なるもの

Excelには、ユーザーフォームとよく似たダイアログシートというものがあります。ワークシートのタブを右クリックしたとき表示されるメニューの挿入(I)を選択すると、「MS Excel 5.0 ダイアログ」を選択して挿入することができます。

ダイアログシートはVBAから操作することも可能ですが、オブジェクト変数を設定したり扱いが結構面倒です。イベント処理もなく、表現力もユーザーフォームに劣るため、ダイアログシートを使用するメリットは特にありません。また、この講座でも特に取扱いません。

古いブックとの互換性のためだけに存在しているような機能ですが、もしダイアログシートを使用している場合はできる限りユーザーフォームに置換していくことをおすすめします。

次回から、ユーザーフォーム上に配置される各コントロールオブジェクトについて、より詳しく解説していきたいと思います。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,