ユーザーフォームの 作 り 方 ここでは Excel 2003 でのユーザーフォームを 作 成 しマクロを 貼 り 付 ける 方 法 について 説 明 する 1.ユーザーフォームの 作 成 Excel 2003 のメニューバーの ツール をク リックし 表 示 されるメニューで マクロ/ Visual Basic Editor をクリックすると 図 1 のような Microsoft Visual Basic のウィンド ウ( 以 下 VBA ウィンドウ と 呼 ぶ )が 開 く 最 初 に 留 意 すべきことは このウィンドウを 用 いて 作 成 するユーザーフォームやマクロは すべて 元 々の Excel ファイル( 右 図 の 例 では Book1.xls )に 格 納 されることである ユー ザーフォームやマクロを 作 成 した 後 このウィ ンドウを 閉 じたとしても すべての 情 報 が Excel ファイルに 格 納 されているので 再 表 示 すればさらに 修 正 等 が 可 能 である 図 1の VBA ウィンドウで 左 側 上 部 に 表 示 される プロジェクト ウィンドウは プロ ジェクトエクスプローラ と 呼 ばれるもので 当 該 Excel ファイル( 右 図 の 例 では Book1.xls ) の 構 成 を 表 示 するものであり 左 側 下 部 に 表 示 される プロパティ ウィンドウは その 時 点 でアクティブになっているユーザーフォーム やコントロールの 属 性 を 表 示 するものである 図 1 Microsoft Visual Basic ウィンドウ 図 2のように 左 から2 番 目 にある ユーザーフォームの 挿 入 ボタンをクリックすると 作 業 領 域 に 図 3のユーザーフォー ムが 表 示 され あわせて 図 4の ツールボックス が 表 示 される ツールボックスに 表 示 されるアイコンは コントロール と 呼 ばれるものであり コントロールをユーザーフォーム 上 に 貼 り 付 けることでユーザーフォームを 完 成 させることになる 図 2 1
図 3 図 4 このとき 図 3のようにユーザーフォームの 周 囲 が 網 掛 け 線 で 囲 まれているが このことはユーザ ーフォームがアクティブになっていることを 意 味 する さらに プロジェクトエクスプローラに UserForm1 が 追 加 され プロパティはこの 時 点 でアクティブな UserForm1 の 属 性 を 表 示 し ていることが 確 認 できる 2.コントロール 各 コントロールの 名 称 は 次 表 (ツールボックスの 位 置 にあわせてある )のようなものである オブジェクトの 選 択 ラベル テキスト ボックス コンボ ボックス リスト ボックス チェック ボックス オプション ボタン トグル ボタン フレーム コマンド ボタン タブ ストリップ マルチ ページ スクロール バー スピン ボタン イメージ RefEdit その 他 にもコントロールがあり デフォルトコントロールが 表 示 されているツールボックス 上 で 右 クリックすると 多 数 のコントロールが 表 示 されるが ここでは 説 明 を 省 略 する それぞれのコントロールの 用 途 は 次 のようになる 1.ラベル 右 図 の 氏 名 住 所 のようにユーザーフ ォーム 上 に 文 字 ( 文 章 )を 表 示 するための 枠 を 作 成 するときに 使 用 する 2.テキストボックス 右 図 のようにデータを 書 き 込 むためのボッ クスを 作 成 するときに 使 用 する 2
3.コンボボックス 右 図 のように メニュー 形 式 で 複 数 の 項 目 を 表 示 し 1つの 項 目 を 選 択 するためのボックス を 作 成 するときに 使 用 する ボックス 内 に 選 択 リストにない 項 目 を 直 接 入 力 することも 可 4.リストボックス 右 図 のように データをリスト 表 示 し その 中 の 一 つのデータを 選 択 するためのボックス を 作 成 するときに 使 用 する コンボボックスでは 直 接 入 力 が 可 能 である が リストボックスでは 直 接 入 力 はできない 5.チェックボックス 右 図 のように 複 数 の 項 目 からいくつかの 項 目 を 選 択 するためのボタンを 作 成 するときに 使 用 する このボックスをクリックすればチェ ックが 付 き 再 度 クリックすればチェックが 外 れる 複 数 の 項 目 にチェックが 可 能 6.オプションボタン 右 図 のように 複 数 の 項 目 から1つの 項 目 を 選 択 するためのボタンを 作 成 するときに 使 用 する オプションボタンをクリックすればチェ ックが 付 き 別 のボタンをクリックすればチェ ックが 外 れる 複 数 の 項 目 のチェックは 不 可 7.トグルボタン 右 図 のようなオンかオフを 指 定 するための ボタンを 作 成 するときに 使 用 する このボタン をクリックすると 押 し 込 まれたよう(オン)に なり 再 度 クリックすると 元 (オフ)に 戻 る 8.フレーム 右 図 のようにコントロールをグループ 分 け するための 囲 み 線 を 作 成 するためのものであ り ユーザーフォームを 見 やすくするためのも のである 3
9.コマンドボタン 右 図 のように クリックすることで 命 令 (サ ブマクロ)を 実 行 するためのボタンを 作 成 する ときに 使 用 する 10.タブストリップ 右 図 のようにタブ 付 きのボックスを 作 成 す るためのものであり 各 ページのコントロール の 構 成 は 同 一 のものとなる テキストボックス をタブストリップ 上 に 配 置 すれば タブごとに 異 なるデータを 表 示 することができる 11.マルチページ 右 図 のように タブ 付 きのダイアログを 作 成 するためのものであり 各 ページに 異 なる 構 成 のコントロールを 配 置 することができる 標 準 は2ページであるが ユーザーフォーム 作 成 時 にタブの 部 分 で 右 クリックすることで ページの 追 加 も 可 能 です 12.スクロールバー 連 動 したテキストボックスの 値 を 増 減 させるためのスクロールバーを 作 成 するときに 使 用 する 13.スピンボタン 連 動 したテキストボックスの 値 を 増 減 させるためのボタンを 作 成 するときに 使 用 する 14.イメージ 右 図 のようにユーザーフォームに 画 像 を 表 示 するための 枠 を 作 成 するときに 使 用 する 15.RefEdit 右 上 図 のように Excel ワークシートのセル 範 囲 を 読 み 取 るためのボックスを 作 成 すると きに 使 用 する このボックスの 右 端 のボタンを クリックすると 右 下 図 のようにユーザーフォ ームが 最 小 化 される この 状 態 で Excel ワー クシートをドラッグするとドラッグしたセル 範 囲 が 入 力 される さらに 右 下 図 のボックス の 右 端 のボタンをクリックすれば 元 に 戻 る 4
3.コントロールの 貼 り 付 け コントロールをユーザーフォームに 貼 り 付 けるためには 図 4のツールボックスのコントロールア イコンをクリックし 図 3のユーザーフォーム 上 でクリックすればよい いくつかのコントロールを 連 続 して 貼 り 付 けるときは ツールボックスのコントロールアイコンを ダブルクリックすればよい さらに 連 続 貼 り 付 けを 解 除 するためには ツールボックスのコントロ ールアイコンをクリックすればよい 貼 り 付 けたコントロールをクリックすれば そのコントロールがアクティブになる アクティブな 状 態 で 網 掛 け 枠 線 にマウスポインタをあわせドラッグすれば コントロールを 移 動 させることができ る さらに 網 掛 け 枠 線 の8カ 所 にある 四 角 なポインタをドラッグすれば コントロールのサイズを 変 更 できる このサイズ 変 更 はユーザーフォーム(ポインタは3カ 所 のみである )についても 同 様 に 行 うことができる 上 述 のようなコントロールの 移 動 サイズ 変 更 はユーザーフォームに 表 示 されているドット (6ピクセル 間 隔 ) 単 位 で 行 われる 6ピクセ ルよりも 細 かい 単 位 での 移 動 やサイズ 変 更 を 行 うためには プロパティ を 使 用 しなければな らない 4.プロパティ 図 5のように プロパティには 各 項 目 をア ルファベット 順 に 表 示 する 全 体 と グルー プ 分 けして 表 示 する 項 目 別 があり タブの クリックで 切 り 替 えられる 各 項 目 は 項 目 名 とその 値 からなっている 値 の 変 更 は 項 目 名 をクリックして 選 択 ( 図 5では BackColor が 選 択 されている )してから 値 欄 を 変 更 する ことで 行 うことができる この 値 の 変 更 には2つのパターンがあり 直 接 値 を 入 力 すべき 項 目 と 項 目 名 をクリックし たとき 値 欄 にボタンが 表 示 ( 図 5では Back Color を 変 更 するためのボタンが 表 示 されてい る )され ボタンをクリックしメニューの 中 か ら 必 要 な 値 を 選 択 する 項 目 とがある 以 下 ではよく 使 う 項 目 についてのみ 説 明 する 図 5 ユーザーフォームのプロパティ 5
(1) (オブジェクト 名 ) : 直 接 入 力 項 目 オブジェクト 名 は ユーザーフォームやコントロールを 指 定 するための 名 称 であり サブマク ロでこれらを 指 定 するときに 使 用 する サブマクロ 作 成 時 にこの 名 称 を 入 力 する 必 要 があるので 簡 単 な 名 称 に 変 更 することもできる (2) Caption : 直 接 入 力 項 目 Caption は デフォルト 値 はオブジェクト 名 になっている ユーザーフォームの Caption は ユーザーフォームのタイトルバーの 名 前 ラベルの Caption は ラベルとして 表 示 する 文 章 チェックボックスとオプションボックスの Caption は チェックボックスの 右 側 に 表 示 す る 文 章 トグルボタンとコマンドボタンの Caption は ボタンの 表 面 に 表 示 する 文 章 フレームの Caption は フレームの 左 上 部 に 表 示 されるフレームの 名 称 マルチページの Caption は マルチページの 各 ページを 示 すタブの 名 称 その 他 のコントロールでは Caption が 存 在 しない (3) Left Top : 直 接 入 力 項 目 Left と Top は コントロールの 位 置 を 指 定 するもので コントロールの 左 上 隅 の 位 置 をユ ーザーフォームの 左 上 隅 からのピクセル 数 で 指 定 する (4) Height Width : 直 接 入 力 項 目 Height と Width は コントロールのサイズを 指 定 するもので コントロールの 高 さ と 幅 をピクセル 数 で 指 定 する (5) BackColor :メニュー 選 択 項 目 BackColor は 背 景 色 を 指 定 するための 項 目 である 値 欄 右 側 のボタンをクリックし 表 示 さ れるメニューから 色 を 選 択 することになるが パレット タブをクリックし 色 見 本 の 中 から 色 を 指 定 する (6) Font :メニュー 選 択 項 目 Font は Caption の 文 字 フォントを 指 定 するためのものであり テキストボックス コンボ ボックス リストボックス RefEdit の 場 合 は ボックス 内 に 入 力 ないし 表 示 する 文 字 のフォントを 指 定 することになる (7) Value : 直 接 入 力 項 目 テキストボックス コンボボックス 及 び RefEdit の Value は 初 期 にボックス 内 に 表 示 す る 文 字 列 6
チェックボックス 及 びオプションボックスの Value は 初 期 状 態 でのチェックの 有 無 を 意 味 し デフォルト 値 は False で True に 変 更 可 能 False はチェックなし True はチェックありとなる トグルボタンの Value は ボタンが 押 された 状 態 (オン)と 押 されていない 状 態 (オフ) を 意 味 し デフォルト 値 が False であり True に 変 更 可 能 False はオフ True はオンなる タブストリップの Value は 初 期 に 表 示 するタブを 意 味 し 左 から 順 に 0,1,2 となる デフォルト 値 は 0 である (8) Index : 直 接 入 力 項 目 Index は タブストリップに 対 する Value と 同 様 に マルチページにおいて 初 期 に 表 示 す るページを 意 味 し 左 から 順 に 0,1,2 となる デフォルト 値 は 0 である (9) TextAlign :メニュー 選 択 項 目 TextAlign は ラベル テキストボックス コンボボックス リストボックス チェックボッ クス オプションボタン トグルボタン RefEdit の 各 コントロールにおいて 表 示 する 文 字 列 の 横 位 置 を 指 定 する 1 は 左 詰 め 2 は 中 央 揃 え 3 は 右 詰 めを 意 味 し デフォルト 値 はラベル テキストボックス コンボボックス リストボックス チェックボックス オプションボタン RefEdit が 1 トグルボタンが 2 である 5.コントロールへのサブマクロの 関 係 付 け Excel マクロは サブマクロと 呼 ばれる 個 々の 処 理 を 行 うプログラムの 集 合 体 として 構 成 される さらにこれらのサブマクロは2 種 類 に 分 類 され ユーザーフォームでの 処 理 に 関 連 したサブマクロ と 一 般 のサブマクロに 分 けられる 一 般 のサブマクロは 標 準 モジュール として Module1(マ クロ 名 ) 等 にまとめられ Excel ファイルに 添 付 される 一 方 ユーザーフォームでの 処 理 に 関 連 し たサブマクロは フォーム として UserForm1(ユーザーフォーム 名 ) 等 にまとめられて Excel ファイルに 添 付 される ユーザーフォームは 各 種 のコントロールを 組 み 込 んだダイアログボックスと ユーザーフォー ムでの 処 理 に 関 連 したサブマクロの 集 合 体 とで 構 成 される ユーザーフォームはそれだけで 実 行 できるものではなく 標 準 モジュールから 呼 び 出 して 使 用 す るものである 標 準 モジュールとユーザーフォームとは 別 のものとして 保 存 されるので 異 なる 標 準 モジュールで1つのユーザーフォームを 利 用 することもできる (1)ダブルクリックによる 方 法 ユーザーフォーム 上 に 貼 り 付 けたコントロールに サブマクロを 関 係 付 けるためには コントロー ルをダブルクリックし 作 成 される 空 のサブマクロに 必 要 事 項 を 記 述 すればよい なお ダブルクリ 7
ックする 前 に そのコントロールをクリックしアクティブにしておくのがよいようです プロジェクト 名 が CommandButton1 であるコマンドボタンをダブルクリックすると 次 の 空 のサブマクロが 作 成 される Private Sub CommandButton1_Click() End Sub このサブマクロの 意 味 は コマンドボタン CommandButton1 がクリックされたとき 記 述 され たサブマクロを 実 行 せよ というものである 一 般 に コマンドボタンとタブストリップ 以 外 のコントロールに 直 接 サブマクロを 関 係 付 けること はないように 思 われる もちろん コマンドボタン 以 外 のラベル リストボックス チェックボック ス オプションボタン トグルボタン フレーム イメージをクリックしたときに 何 らかの 命 令 (サ ブマクロ)を 実 行 させることも 可 能 である (2)コードの 表 示 による 方 法 コントロールをダブルクリックせずに 空 のサブマクロを 作 成 する 方 法 は 1 作 成 中 のユーザーフォーム 上 で 右 クリックし 開 くメニューの 中 の コードの 表 示 をクリック ないし 2プロジェクトエクスプローラの 一 番 左 側 のボタン コードの 表 示 をクリック することで コードを 表 示 させることで も 可 能 である この 場 合 は 図 6のよう にコードウィンドウを 表 示 するだけで ダブルクリックの 場 合 と 異 なり 空 のサブ マクロが 作 成 されない コードは ユーザーフォームに 関 連 し て 作 成 されたサブマクロを 表 示 するため のものであり 1つのユーザーフォーム に 対 して1つしかなく 順 次 追 加 される 図 6 コードウィンドウ 空 のサブマクロを 作 成 するためには コードウィンドウの 一 番 上 にある2つのボックスを 使 用 する ことができる まず 左 側 のボックス( 図 6では (General) となっている ) 右 端 のボタンをクリ ックし リスト 表 示 される オブジェクトリスト から 目 的 のコントロールを 選 択 する 次 に 右 側 のボックス( 図 6では (Declarations) となっている ) 右 端 のボタンをクリックし リスト 表 示 される プロシジャリスト から 目 的 のプロシジャを 選 択 すれば 空 のサブマクロが 作 成 される 8
6.コントロールの 順 番 コントロールに 順 番 をつけておくと 便 利 であり 一 般 的 には 左 上 にあるコントロールから 順 に 順 番 がつけられる デフォルトの 順 番 は コントロールの 作 成 順 であるため 移 動 を 繰 り 返 す 内 に 滅 茶 苦 茶 な 順 番 になってしまうことが 多 い ユーザーフォーム 作 成 後 に コントロールの 順 番 を 整 理 するために 1 VBA ウィンドウのメニューの 表 示 をクリック ないし 2 作 成 中 のユーザーフォーム 上 で 右 クリック し 開 かれるメニューの 中 の タブオーダー をクリックする 開 かれるダイアログボックスに そ の 段 階 での 順 番 でオブジェクト 名 が 表 示 される 移 動 したいオブジェクト 名 をクリックし 上 に 移 動 ないし 下 に 移 動 のボタンをクリックすることで 順 番 を 整 理 し OK ボタンをクリックす ればよい 実 際 にユーザーフォームを 使 用 する 際 Tab キーを 押 せば 指 定 された 順 にコントロールがア クティブになる 7.ユーザーフォームの 表 示 と 終 了 Excel で 作 成 してあるユーザーフォームは サブマクロによって 開 く ことになり オブジ ェクト 名 が UserForm1 であるユーザーフォームを 開 くためのサブマクロは 次 のとおりである Sub Macro1() ' ' Keyboard Shortcut: Ctrl+e ' UserForm1.Show End Sub オブジェクト 名 が UserForm1 以 外 のユーザーフォーム( 例 としてオブジェクト 名 を abc とす る )を 開 くときは 上 記 サブマクロで UserForm1.Show の 部 分 を abc.show とすればよい ユーザーフォームを 閉 じる ためには Caption を 終 了 等 としたコマンドボタンを 作 成 し そのコマンドボタンに 次 のサブマクロを 関 係 付 ければよい Private Sub CommandButton2_Click() Unload Me End Sub ただし ここではオブジェクト 名 が CommandButton2 であるコマンドボタンが 終 了 ボタ ンであるとしている 9
8.UserForm_Initialize サブマクロの 作 成 UserForm_Initialize は 当 該 ユーザーフォームが Excel から 呼 び 出 されたとき 最 初 に 自 動 的 に 実 行 されるサブマクロであり プロパティでは 指 定 できない 色 々な 設 定 を 記 述 するためのものである 5.コントロールへのサブマクロの 関 係 付 け の 後 半 で 説 明 した コードの 表 示 で オブジ ェクトリスト から UserForm を 選 択 し プロシジャリスト から Initialize を 選 択 する すると 次 の 空 のサブマクロ(UserForm_Initialize)が 作 成 される Private Sub UserForm_Initialize() End Sub 9.タブストリップのタブの 名 称 を 変 更 する マルチページの 各 ページの 名 称 (デフォルト 名 は Page1 Page2 等 )はプロパティの Caption で 変 更 できるが タブストリップのタブの 名 称 (デフォルト 名 は Tab1 Tab2 等 )はサブマクロを 使 って 定 義 しなければ 変 更 できない このような 定 義 を 行 うためのサブマクロが UserForm_Initialize である このサブマクロで オブジェクト 名.Tabs(0).Caption = "タブの 名 称 " を 記 述 すればタブ 名 称 を 変 更 することができる なお Tabs(0)は 最 も 左 側 のタブを 意 味 し 2つめ 3つ 目 のタブは Tabs(1) Tabs(2)となる 例 えば オブジェクト 名 が TabStrip1 であり 4つのタブがあるとき タブ 名 称 を 左 から 順 に 春 夏 秋 冬 にするためには 次 のようにすればよい Private Sub UserForm_Initialize() TabStrip1.Tabs(0).Caption = " 春 " TabStrip1.Tabs(1).Caption = " 夏 " TabStrip1.Tabs(2).Caption = " 秋 " TabStrip1.Tabs(3).Caption = " 冬 " End Sub 10.コンボボックスないしリストボックスに 項 目 リストを 組 み 込 む コンボボックスないしリストボックスに 項 目 リストを 組 み 込 むためには UserForm_Initialize サ ブマクロに 必 要 事 項 を 書 き 込 まなければならず UserForm_Initialize サブマクロに 追 加 すべき 項 目 を オブジェクト 名.AddItem 項 目 として 記 述 すれば 項 目 リストを 組 み 込 むことができる 10
オブジェクト 名 が ComboBox1 であるコンボボックスに 次 にリストを 組 み 込 み 日 本 アメリカ 中 国 オブジェクト 名 が ListBox1 であるリストボックスに 次 にリストを 組 み 込 むこととする 軽 自 動 車 小 型 乗 用 車 排 気 量 2000cc 以 下 普 通 乗 用 車 排 気 量 2000cc 以 下 普 通 乗 用 車 排 気 量 2000cc 超 このためのサブマクロは 次 のようになる Private Sub UserForm_Initialize() ComboBox1.AddItem 日 本 ComboBox1.AddItem アメリカ ComboBox1.AddItem 中 国 ListBox1.AddItem 軽 自 動 車 ListBox1.AddItem 小 型 乗 用 車 排 気 量 2000cc 以 下 ListBox1.AddItem 普 通 乗 用 車 排 気 量 2000cc 以 下 ListBox1.AddItem 普 通 乗 用 車 排 気 量 2000cc 超 End Sub ここで 同 一 のオブジェクトで 表 示 される 項 目 の 順 番 は UserForm_Initialize に 書 き 込 まれた 順 番 になる 11.リストボックスに 複 数 列 のデータを 表 示 する リストボックスには 複 数 列 のデータを 表 示 することがで きる 当 該 リストボックスのプロパティにおいて ColumnCount を 3 ColumnHeads を True ColumnWidths を 40;40;70 Widths を 150 図 7 とすれば 図 7のようになり 複 数 列 を 表 示 することが 可 能 となる ColumnCount で 列 数 ColumnWidths で 各 列 の 幅 を 指 定 することになる なお 最 後 の 列 の 幅 はリストボックス 全 体 の 幅 に 依 存 し 全 体 の 幅 が 優 先 されるので 指 定 しなくてもかまわない す なわち 上 の 例 で ColumnWidths を 40;40 としても 同 じ 結 果 になる ColumnHeads は 見 出 し 欄 を 使 用 するかどうかを 指 定 するためのもので False にすれば 見 出 し 用 の 枠 が 表 示 されない 11
リストボックスに 表 示 する 項 目 を 指 定 する 方 法 はいくつかある が 一 般 的 な 方 法 は Excel シート から 読 み 込 む 方 法 であろう Excel の Sheet2 に 図 8のよう にデータが 入 力 されているときに 図 8 Excel シート プロパティで RowSource を Sheet2!A2:C3 とすれば 図 9のようになる ここで 注 意 すべきことは 見 出 しが 入 力 されているセル ( 図 8の 例 では A1:C1)を 指 定 せず データの 領 域 のみを 指 定 することである もし この 例 で Sheet2!A1:C3 とする 図 9 と 見 出 しもデータとして 扱 われてしまい 見 出 し 欄 には 列 A 列 B 列 C と 表 示 される これは 指 定 行 が Excel シートの 最 上 位 行 であったため さらにその 上 の 列 名 が 見 出 しとして 表 示 されたわけで 最 上 位 行 でないときはすぐ 上 の 行 のセル 内 容 が 見 出 しとして 表 示 される 12.コントロールに 入 力 されたデータの 読 み 込 み 入 力 されたデータとしては 1 テキストボックス コンボボックス RefEdit のボックス 内 に 入 力 された 文 字 列 2 リストボックスは 選 択 された 項 目 ( 文 字 列 ) 3 チェックボックス オプションボックス トグルボタンは チェックあるいは 押 し 込 まれてい るかどうかのデータで チェックボックスとオプションボックスは チェックされているとき True チェックされていないとき False トグルボタンは オンの( 押 し 込 まれている) とき True オフの( 押 し 込 まれていない)とき False の 値 となる 4 タブストリップは 選 択 されているタブ( 番 号 ) 等 があり 1と2の 文 字 列 は オブジェクト 名.Text で 読 み 込 むことができる また 3と4のデータは オブジェクト 名.Value で 読 み 込 むことができる サブマクロにおいてこれらのデータを 読 み 込 みいろいろな 処 理 に 使 用 することができる 12