ユーザーフォームを作る

Excel-VBA ユーザーフォーム

スポンサーリンク


波乗りアヒル
波乗りアヒル

エクセルでオリジナルの入力画面を作ってみませんか?

オリジナルなので自分の使いたいように自由に作ることができるので使い勝手は最高です。

VBAとか全く分からないので自分には無理!って思っていませんか?

波乗りアヒル
波乗りアヒル

私自身も数年前まで全くの素人でした。VBAどころかエクセル関数も???状態が、ここまでのレベルまで前進しました!

ユーザーフォームを作ると入力作業やデータ検索が格段に速くなり、間違えもなくなったので仕事の作業効率が上がり時間の余裕ができましたので、ぜひ挑戦してみてはいかがですか?

波乗りアヒル
波乗りアヒル

合言葉は『エクセルの学校通いや資格が無くてもやればできる』ですよね。

初心者には分かりやすく使い込んでだいぶボロボロになってしまいましたが、ここまでできたのもこの本のおかげですね。





スポンサーリンク


スポンサーリンク

ユーザーフォームとは?

Excel VBAで自分自身のオリジナル画面(ダイアログボックス)を作るにはユーザーフォームというものが便利ですが、このユーザーフォームはワークシート上にも貼り付けて使用することができます。

ただし、ワークシート上に張り付けるとエクセル自体を自分自身で使うならば問題ないかもしれませんが、作成者以外の人(職場などで他の人)が使う場合などでは、作成者が意図しない操作をされてしまい誤作動や誤操作によりせっかく作ったVBAプログラムが機能しないという場合もあるので、ユーザーフォームを使う方が作成者の意図した操作のみできるようになります。

このユーザーフォームには、プログラムした内容を実行する「コマンドボタン」や入力されたセルの文字を読み込んで表示させる「ラベル」、文字の入力用の枠「テキストボックス」、特定のリストの中から選んでもらえる「リストボックス」などが自由に配置できるので覚えるととても便利になりますので、VBAを使うならば必須アイテムです。

波乗りアヒル
波乗りアヒル

この「ユーザーフォームを作る」ページでは商品入力フォームの作成をしながら、ユーザーフォームやテキストボックスの簡単な使い方をご紹介します。

ユーザーフォームの作成

エクセルのユーザーフォームを作成するには、Visual Basic Editor(VBE)を開きますが方法は2つあります。

  1. [Alt]+[F11]キーを押して、Visual Basic Editor(VBE)を起動する
  2. 開発からVisual Basic Editor(VBE)を起動する

※開発の表示方法

UserForm1

【図1】 UserFormを作る

UserForm2

【図2】 UserFormができた

エクセルワークシートの左上のOfficeボタンをクリックしてからExcelのオプションをクリック。

Excelのオプションが開きますので、「開発タブをリボンに表示する」にチェックを入れるだけです

Visual Basic Editor(VBE)を起動すると下記のような画面が表示されたら、【挿入】をクリックして次に【ユーザーフォーム】をクリックするとユーザーフォームが表示されます。

波乗りアヒル
波乗りアヒル

当たり前ですが、まだ何の機能もないただ単のフォームです。

UserForm3

【図3】 UserFormプロパティを表示する

UserForm4

【図4】

ではこの「UserForm1」の名前などを変更しますので、【表示】をクリックして次に【プロパティウィンドウ】をクリックすると、「UserForm1」のプロパティが表示されます。

ユーザーフォームを挿入したら、好みの名前や書式に変更するプロパティウィンドウの設定をしましょう。
スポンサーリンク

プロパティウィンドウ

プロパティウィンドウには、作成したフォームやフォーム上に作成したコマンドボタンなどの書式などのプロパティを設定できるようになっています。

UserForm5

【図5】

【図1】で作成したUserForm1の名前を変えて用途に合った名前にしましょう。

左の【図5】は、

ウィンドウの表示は左に名称

右に値です。

【図6】

変更方法は【図5】のCaptionを「UserForm1」から「商品登録」にすると、【図6】のように変わりました。

波乗りアヒル
波乗りアヒル

せっかくなので、作成したユーザーフォームをエクセルのワークシート上で動かしてみましょう。

操作方法は、Visual Basic Editor(VBE)画面のボタンを押してみましょう。

当然ながら、まだ何も設定していないので、ワークシート上に商品登録のフォームが表示されるだけです。表示されたユーザーフォームの右上の印をクリックで元の画面に戻ります。

ちなみに、ユーザーフォームの大きさを変えるのは、通常の画像と同じように左クリックしながら引っ張れば、大きさを変えられます。もちろん、プロパティからも変更可能ですが、直感的に操作できるのは、先に書いた通りです。

それでは、次に商品登録ができるように、ツールボックスを使ってユーザーフォームを作ってみましょう。

ユーザーフォームを使いこなすと住所録だって簡単にできちゃいます。

スポンサーリンク


UserFormのツールボックスを使う

ツールボックスとは、作成したユーザーフォームにコントロールという部品セットみたいなものです。

このコントロールには、文字や数字を入れる「テキストボックス」やユーザーフォームに文字列を表示する「ラベル」など使う目的に応じて種類があります。

ツールボックス

コントロール名機能
ラベル文字列の表示
テキストボックス文字列の入力
コンボボックス一覧から選択して文字列の入力
リストボックス一覧から項目選択
チェックボックス複数の項目から複数の項目を選択
オプションボタン複数の項目から1つの項目を選択
トグルボタンオン・オフの切替
フレームコントロールのグループ化
コマンドボタンボタンクリックによるコマンド実行
タブストリップタブによりページ切替(同一コントロール)
マルチページタブによりページ切替(ページ別複数コントロール)
スクロールバースクロール操作で値の増減
スピンボタンボタンのクリック操作で値の増減
イメージ画像の表示
RefEditセルの範囲選択
カレンダーカレンダー
カレンダー機能はエクセル2007しかありません。エクセル2010以降では表示されませんし、使おうとするとエラーになります。
波乗りアヒル
波乗りアヒル

無くなってしまったならば、作ってしまおう!

困っている人多いようで1日平均最低300人の方が見に来ているページです。

では、先ほど作成した商品登録(UserForm1)に商品名を入力する枠を作りますが、この文字や数字を入力する枠の事を「テキストボックス」といいます。

ユーザーフォームテキストボックス

ツールボックスのテキストボックスにマウスのカーソルを合わせると”テキストボックス”とコメントが表示されますので、クリックしてUserForm1の中に好きな大きさにドラッグ&ドロップするだけです。

レイアウトは後回しで、大きさや位置など気にせずに3つ作りましょう。

テキストボックスは作成した順番にTextBox1、2、3となり、次にこのテキストボックスに文字を入れた時に、エクセルシートの任意のセルに入力する為に実行させるボタンを作ります。

このボタンの事をコマンドボタン(CommandButton)といいます。

コマンドボタンの作成もテキストボックス作成時と同様の方法で、ツールボックスからコマンドボタンを選ぶだけです。

これで、TextBox1、2、3に入力した文字や数字がCommandButton1を押すことによって、エクセルシートの任意のセルに入力するというユーザーフォームの最初の1歩ができました。

といってもまだ完成したわけではありません。まだ、何も指示命令(コード)を設定していないからです。

実際に前述した、Visual Basic Editor(VBE)画面のボタンを押して、エクセルシートに表示された商品登録(UserForm1)のTextBox1、2、3に文字を入れて、CommandButton1を押してみても何も変化はないですね。(ボタンが押せたぐらいです)

波乗りアヒル
波乗りアヒル

オリジナルフォームの第1歩!がんばって!

コマンドボタンにコードを書いてみましょう

TextBox1、2、3に入力した文字や数字を指定したシートのセルに記述する(転記)コードを書いてみます。

転記するシートは、Sheet1。セルはA1とすると、下記のようになります。

Private Sub CommandButton1_Click()
Worksheets(“sheet1”).Range(“A1”).Value = TextBox1.Value
Worksheets(“sheet1”).Range(“B1”).Value = TextBox2.Value
Worksheets(“sheet1”).Range(“C1”).Value = TextBox3.Value
End Sub
  1. コマンドボタン1が押されたら
  2. シート名(sheet1)のセルA1の値はテキストボックス1の値にする
  3. シート名(sheet1)のセルB1の値はテキストボックス2の値にする
  4. シート名(sheet1)のセルC1の値はテキストボックス3の値にする
  5. マクロ終了

これで、TextBox1に入力された文字や数字はSheet1のセルA1に、TextBox2に入力された文字や数字はSheet1のセルB1に、TextBox3に入力された文字や数字はSheet1のセルC1に、必ず転記されます。

では、Visual Basic Editor(VBE)画面のボタンを押して、エクセルシートに表示された商品登録(UserForm1)のTextBox1、2、3に文字を入れて、CommandButton1を押すと、ワークシートにユーザーフォームを使って入力した文字や数字が、転記されましたね。

波乗りアヒル
波乗りアヒル

いかがでしたか?オリジナルフォーム。これからですよ!

この方法でユーザーフォームを使ってセルの入力ができましたが、この方法だと何度入力しても同じセルに上書きされるだけなので実用性はありません。

そこで、コマンドボタンを押して入力が終わると、次の行に自動的に入力されてリストが作れるようにコードを追加すればできるようになります。

でもその前に、ユーザーフォームの見た目を無視して作ったので体裁が悪いので、テキストボックスを揃えたりコマンドボタンの名前を変えたりと体裁を整えましょう。

コントロールの大きさや位置を揃える方法

3つ作ったテキストボックスの大きさを揃える方法は、コントロールを複数まとめて選んでVisual Basic Editor(VBE)画面の「書式」➡「同じサイズに揃える」を選びます。

表示された「幅」「高さ」「両方向」の中から揃えたい大きさの項目を選べば、バラバラだったテキストボックスの大きさ・位置が綺麗に揃います。

①複数のテキストボックスを選ぶ

コントロールの大きさ変更

①コントロールの大きさ変更

②大きさを揃える

テキストボックスを揃える

②テキストボックスを揃える

③配置を揃える

テキストボックスの配置を揃える

③テキストボックスの配置を揃える

完成

テキストボックスの大きさ位置が揃う

テキストボックスの大きさ位置が揃う

コマンドボタンの名前を変える方法

「CommandButton1」の名前を変える方法は簡単です。

Visual Basic Editor(VBE)画面左下にコントロールのプロパティがありますので、ここで変更します。

コマンドボタンプロパティ

コマンドボタンプロパティ

ユーザーフォームの中の「CommandButton1」をクリックすると、コントロールのプロパティが「UserForm1」から「CommandButton1」のプロパティに変わります。

正直英語でずらずら並んでいるので分かりずらいですが、アルファベット順にAから順番に上から並んでいます。

ここでは、「CommandButton1」を押すと商品名が登録できるようにユーザーフォームを作っているので、コマンドボタンの名前は「登録」が合っていますので、「CommandButton1」という表示を「登録に変更する設定をします。

「CommandButton1」のプロパティの(オブジェクト名)の行の6行目に「Caption」があり、右側に「CommandButton1」となっています。

ここの「CommandButton1」と書いてある文字を削除して「登録」に書き換えると、コマンドボタンの名前が変わります。

波乗りアヒル
波乗りアヒル

これで完成です。

Caption変更

次はテキストボックスがユーザーフォーム上に並んでいるだけなので、テキストボックスのところに何の事柄を入れるのかわからないのでタイトルや見出しをつけましょう。

ユーザーフォームのラベルを配置する方法

ユーザーフォームのラベル(Label)とは、フォーム上に文字列を表示する為のコントロール(部品)です。

ラベルには直接文字入力などをするものではありませんが、フォーム上のお題(タイトル)や他のコントロールの説明書きなどに利用することが多いです。

先ほどのテキストボックスやコマンドボックスを作成した時と同じ方法で、ツールボックスからラベルを選びます。

ツールボックス

ツールボックス

配置方法は以下の通りです。

① ラベルを配置したいユーザーフォームを選ぶ

② ユーザーフォームをクリック

③ ツールボックスが表示される

④ ツールボックスからラベルをクリック

⑤ マウスのポインターの表示が変わる

⑥ ユーザーフォーム内のラベルを配置したい場所をクリック

これでユーザーフォーム上にラベルが配置されました。

この作業を繰り返せば、ラベルはユーザーフォーム上に複数配置可能です。

波乗りアヒル
波乗りアヒル

長い時間ありがとうございました。

まずは基本的なユーザーフォームの使い方です。

各コントロールまとめて転記シリーズ

ユーザーフォームを使うと配置したコントロール(テキストボックスやラベルなど)とセルとの間で値のやり取りが多くなります。

よく使うのでまとめてみました。

値の場所転記したい場所説明ページ
セルの値ラベル名VBAコード
セルの値テキストボックスの値VBAコード
セルの値コマンドボタンの表示名VBAコード
セルの値セルの値VBAコード
テキストボックス入力値セルの値VBAコード
波乗りアヒル
波乗りアヒル

成績表作成には知っておきたいExcel-VBAもくじ

ボウリングハンデキャップのつけ方
HDCPの種類はリーグのルールにより複雑に ボウリングの成績表(リーグ戦)で必ず必要になるのが、ハンデキャップ(HDCP)です。 ボウリングご予約の時に一番多く使われているのが、女性にだけハンデキャップをつけてあげることが多いですね。 だいだい何点ぐらいのハンデキャップが多いの?
ボウリングリーグ対戦表の数字を名前に自動変換する方法
リーグ戦の対戦表をエクセルで作る時、数字で表されている番号を名前に自動的に変換できると作業時間が短くなり効率的ですね。たった2つのエクセル関数を使うだけで、簡単にできるんです。今回の回戦数を入力するだけで一発変換完了。もちろんお客様にスケジュール対戦表として渡すことも簡単ですよ。
人数に応じてリーグ対戦表を自動選択する方法
複数の表があり、条件に合った表を選んで、さらにセルの値を選んで数字を名前に自動変換できると、とても便利なエクセルができますよね。ボウリングのリーグ対戦表も人数により表が異なるので、参加人数が決まったら、自動的に表を選んで対戦番号がこれも自動的に参加者名に変換されると便利で作業効率がアップして時間短縮になりますよ。
波乗りアヒル
波乗りアヒル

エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?

タイトルとURLをコピーしました