ユーザーフォームのリストを使ってみる
Excelの中身をユーザーフォームのリストに表示できます。
1. はじめに
これまでVBAの基本的なコードの書き方やユーザーフォームの作り方を紹介してきました。
今回はVBAとユーザーフォームを組み合わせて、ユーザーフォームのリスト上にExcelの中身を表示させてみたいと思います。
2. 説明
まずExcelの中身を準備します。次のように左から、名前、住所、電話番号、その他としてください。私は3人分の情報を記載しましたが、何人分書いても問題ありません。ワークシートの名前は標準の「Sheet1」から変えないでください。
2.1 ユーザーフォームを作る
以下のようなユーザーフォームを作ってください。各部品のプロパティは以下のように設定してください。
プロパティの設定の仕方は以下の過去記事を参考にしてください。
⓪ユーザーフォーム
Height:180
Width:430
①ラベル
Caption:名前
Height:9
Left:18
Top:24
Width:26
②ラベル
Caption:住所
Height:9
Left:66
Top:24
Width:26
③ラベル
Caption:電話番号
Height:9
Left:204
Top:24
Width:37
④ラベル
Caption:その他
Height:9
Left:300
Top:24
Width:26
⑤リストボックス
オブジェクト名:List
Height:75
Left:6
Top:36
Width:405
⑥コマンドボタン
オブジェクト名:btnClose
Caption:閉じる
Height:18
Left:324
Top:126
Width:78
2.2 コードを書く
次にコードを書いていきます。
ユーザーフォーム作成画面とコード作成画面を切り替えるには以下の赤枠で囲まれたアイコンをクリックします。
次にコード作成画面が出てきたら、
左上のリストボックス:UserForm
右上のリストボックス:Initialize
を選択してください。
すると次のようなコードが現れます。
上記のコードの意味は、「ユーザーフォーム(UserForm)が初期化された時(Initialize)に自動でコード実行」という意味で、ここに書いたコードはユーザーフォームを開いた瞬間に自動で実行されます。
コードの中身は以下になります。
リストボックスの設定は以下になります。
ColumnCountは列の数で今回は「名前、住所、電話番号、その他」の4項目を表示させたいので4にしています。
ColumnWidthsは各列の幅を設定しており、例えば住所は長いため130と大きめにしています。
TextAlign=fmTextAlignLeftは文字を左詰めにするという意味です。
次に以下のコードでリストボックスにExcelの情報を記載していきます。
Row=Range("A1048576").End(xlUp).Rowですが、セル番号:A1048567(Excel2019の最終行)から上に探索していき、空欄じゃなくなった時の行番号を取得するコードになります。
今回は4行目にデータが入っているので、変数Row=4になります。もし5行目までデータが入っていたらRow=5になります。
次に以下のfor文ですが、AddItemはリストに新しい行を追加するコードになります。
ListCountはリストの個数を取得するコードで、上のAddItemで新しい行を追加したのでListCountは1になります。リスト番号は0から始まりますので「ListCount-1」はリストの0番目、つまり一番上のリスト番号を指定していることになります。
2.3 フォームを閉じる処理
次に「閉じるボタン」を押したらユーザーフォームが閉じる処理を追加します。
以下のように上部のリストから、
左上のリストボックス:btnClose
右上のリストボックス:Click
を選択してください。
そしたら以下のように「Unload Me」と記載してください。
上記のコードの意味は、「閉じるボタン(btnClose)がクリック(Click)された時ユーザーフォームを閉じる(Unload me)」という意味になります。
2.4 実行して確認
実行すると冒頭の画像のように、フォームが表示された瞬間にリストにExcelの中身が記載されます。閉じるボタンを押すとユーザーフォームは閉じます。
3. おすすめ書籍
このシリーズはプログラミング初心者にも非常に分かりやすくてお勧めです。
私はプログラミングを初めて勉強する際、3番目の本を大学時代に買ってすごく助かりました。今でも手元に置いてるくらいです。
4. 最後に
次回はもう少し機能を拡張させてみます。
次の記事はこちらです。