ユーザーフォームの基礎
前回の記事ではユーザーフォームの実行方法を中心に解説しました。では今回からはユーザーフォームの作成を中心に解説していきます。
UserForm.xlsm
上記のExcelに入っているユーザーフォームのコードについて解説していきたいと思います。
Private Sub UserForm_Initialize()
With UserForm1
.Caption = "この中で好きな映画のジャンルは?"
.Width = "190"
.Height = "140"
End With
With ListBox1
.Width = "170"
.Height = "10"
.Top = "5"
.Left = "10"
.ColumnCount = 2
.ColumnWidths = "40;90"
.TextAlign = fmTextAlignCenter
.AddItem ""
.List(.ListCount - 1, 0) = "ジャンル"
.List(.ListCount - 1, 1) = "例"
End With
With ListBox2
.Width = "170"
.Height = "70"
.Top = "20"
.Left = "10"
.ColumnCount = 2
.ColumnWidths = "40;90"
.TextAlign = fmTextAlignCenter
.AddItem ""
.List(.ListCount - 1, 0) = "アクション"
.List(.ListCount - 1, 1) = "ジャッキーチェン等"
.AddItem ""
.List(.ListCount - 1, 0) = "恋愛"
.List(.ListCount - 1, 1) = "花より男子等"
.AddItem ""
.List(.ListCount - 1, 0) = "コメディ"
.List(.ListCount - 1, 1) = "Mr.ビーン等"
.AddItem ""
.List(.ListCount - 1, 0) = "SF"
.List(.ListCount - 1, 1) = "スターウォーズ等"
.AddItem ""
.List(.ListCount - 1, 0) = "ホラー"
.List(.ListCount - 1, 1) = "リング等"
.AddItem ""
.List(.ListCount - 1, 0) = "アニメ"
.List(.ListCount - 1, 1) = "ディズニー等"
End With
With CommandButton1
.Visible = True
.Width = "70"
.Height = "25"
.Top = "90"
.Left = "15"
.Caption = "決定"
End With
With CommandButton2
.Visible = True
.Width = "70"
.Height = "25"
.Top = "90"
.Left = "105"
.Caption = "キャンセル"
End With
End Sub
Private Sub CommandButton1_Click()
If ListBox2.ListIndex = -1 Then
MsgBox "好きなジャンルを選んでください"
Else
ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0)
ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1)
Unload Me
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Sub Sample()
UserForm1.Show
End Sub
今回解説するExcelに含まれてるコードは上記の通りです。※上記コードのみはこちらにも記載しています。
ユーザーフォームのイベント
ユーザーフォームを使う上で1番大事になるのが「イベント」です。イベントとは、ワークシートイベントと同じで、Click等の動作を検出し、その動作に合わせた処理を実行させることです。
Private Sub UserForm_Initialize()
Private Sub CommandButton1_Click()
Private Sub CommandButton2_Click()
Private Sub
上記の3種類から分かるように「Private Sub」は共通部分になります。
この話はまた別のページで解説しますので省略しますが、Privateに関しては呼び出せる範囲を表しています。
UserFormやCommandButton1等
次にUserFormやCommandButton1等の部分に関しては、対象のオブジェクトを指定しています。
指定する際には、対象のオブジェクトの「オブジェクト名」を使用します。
_Initialize()や_Click()
ここでは対象のオブジェクトに対するイベントを記載します。
_Initializeとは英語で初期化を意味し、VBAでは新しくフォームを読み込むということを表します。
_Clickはそのままクリックした時を意味します。
イベントは他にも多数ありますが、基本的には上記の2つを覚えておけば大丈夫です。
ユーザーフォームのプロパティ
ユーザーフォームのプロパティは多数ありますが、今回は解説しているExcelで使用しているプロパティだけを紹介します。プロパティ | 意味 |
---|---|
Caption | オブジェクトに表示される文字 |
Width | オブジェクトの横幅 |
Height | オブジェクトの縦幅 |
Top | ユーザーフォームの上からの位置 |
Left | ユーザーフォームの左からの位置 |
Visible | 可視化(表示)するか |
AddItem | データの作成 |
ColumnCount | リストの列数 |
ColumnWidths | リストの列の横幅 |
TextAlign | 文字の垂直方向の揃え位置 |
List | リストの位置 |
ListIndex | リストの上からの位置(0から始まる) |
Caption
Captionはオブジェクトに表示する文字なので、例えばユーザーフォームの場合は、ユーザーフォームのタイトルバーになります。
また、CommandButtonに対してのCaptionの場合は、ボタンに表示されている文字になります。
Width,Height,Top,Left
これらは位置や大きさに関するプロパティになります。
ユーザーフォームそのものの大きさをWidthとHeightで決め、リストボックスやコマンドボタンはWidthとHeightで大きさを決めた上で、TopやLeftで表示位置を指定します。
Visible
こちらは今までのIEの自動操作でも説明したいように、「可視化するか」の意味なので、「True」もしくは「False」で可視化をするかしないかを決めてください。
AddItem
AddItemに関しては、リストボックスを作成する際には必ず使うことになると思います。
AddItemではデータを作成しますので、AddItem ""の中に入れた文字列を直接リストにすることが出来ます。
また、ForやIEの操作と組み合わせることでExcelやサイト上のリストをユーザーフォームに表示することも出来ます。
ColumnCount,ColumnWidths
ColumnCountでは、例えばリストを表の様に複数列の情報を表示したい時、「""」に入れた数だけ列を作ることが出来ます。
ColumnWidthsでは、ColumnCountで作った列の幅を調整することが出来ます。
例えば1列目は文字が少ないが2列目は文字が多い時、サイズを指定することで折り返しの調整をすることも出来ます。
TextAlign
TextAlignでは文字列を「左揃え」「中央揃え」「右揃え」にすることが出来ます。表記は左揃えから「fmTextAlignLeft」「fmTextAlignCenter」「fmTextAlignRight」となります。
List,ListIndex
ここは注意してください。まず、イメージとしては、「Listではリストボックスを表と同じように列と行で取得できる」というイメージです。
次に「ListIndexではリストボックスを行だけでリストとして取得できる」というイメージです。
つまりListIndexでは1を指定したら2行目全てを取得しますが、ListではCellsの様に(行, 列)を指定して、ピンポイントを取得することが出来るのです。
最後に
ここまででユーザーフォームのイベント、プロパティ等を解説してきました。このイベントとプロパティを元に、次回は実際のコードについて解説していきたいと思います。
ユーザーフォームになっても今までのExcelの表と同じように「オブジェクト.プロパティ = ○○」のような表記でコーディングするので、難しく考えることなく、1歩ずつ進んでいってください。