VBA100本ノック 67本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ
問題
#VBA100本ノック67本目
ユーザーフォームのListBoxに、ComboBoxの値で「リスト」シートのA列を絞りこんだデータを表示します。
ListBoxにはB列~D列を列見出しを付けて表示してください。
適宜作業シートを使用。
※オブジェクト名は任意
※コンボは都道府県が設定済としてイベントの作成です。

解答
Private Sub UserForm_Initialize() 'ユーザーフォームが起動したときに一度だけ起動する
Me.ComboBox1.RowSource = Worksheets("都道府県").Range("A2:A48").Address(External:=True)
End Sub
Private Sub ComboBox1_Change()
Dim wsリスト As Worksheet: Set wsリスト = Worksheets("リスト")
Dim wsユーザーフォーム表示用リスト As Worksheet: Set wsユーザーフォーム表示用リスト = Worksheets("ユーザーフォーム表示用リスト")
wsユーザーフォーム表示用リスト.Cells.Clear
Dim 都道府県 As String: 都道府県 = Me.ComboBox1.Value
With wsリスト.Range("A1").CurrentRegion
.AutoFilter 1, 都道府県
.Copy wsユーザーフォーム表示用リスト.Range("A1")
End With
wsリスト.AutoFilterMode = False
With Me.ListBox1
.ColumnCount = 4 '4列
.ColumnHeads = True '見出しあり
.RowSource = wsユーザーフォーム表示用リスト.Range("A1").CurrentRegion.Offset(1).Address(External:=True)
End With
End Sub
Private Sub 終了ボタン_Click()
MsgBox "終了するよ"
Unload Me
End Sub
■考え方・流れ
0:00 冒頭・問題確認
1:57 ユーザーフォームって何ですか?
3:50 ユーザーフォームの作り方
6:07 ユーザーフォームのプロパティ
7:31 コントロールを追加する
8:47 コマンドボタンにマクロを割り当てる
10:34 コンボボックスにセルの値を設定する
14:17 リストボックスにセルの値を設定する
17:39 選択された都道府県でフィルターする
19:28 選択された都道府県のみリストボックスへ表示

初めてのユーザーフォームの
問題ですね!

俺は生まれた時から
知ってたけどね
?

お、おぉん…
ユーザーフォームって何ですか?
さて!じゃあまずは…
ユーザーフォームってなに???レベルから始めるぞ!!
ただ…すまんがここの解説は動画を見てくれ!!!

登録したいボタンを、ダブルクリックすると…

ユーザーフォームの作り方
よし!そしたらお次!
ユーザーフォームをどうやって作るのか!解説していくぞ!!
普段なにげなーく、標準モジュールを挿入していたところ…
実はこんなところに!ユーザーフォームがあるんすわ!!

それをクリックすると…!!
それっぽい画面に移行するぞ!!

そしたらお次!!
ユーザーフォームの起動のやり方なんだけど…
ココで必要なのが、「オブジェクト名」!!!!
プロパティウィンドウから確認してくれ!!

ちなみに、オブジェクト名は変更もできるぞ!!

ほんだら!!!お次!
ユーザーフォームを起動するには…
オブジェクト名.Show とすればOK!!!!


ユーザーフォームのプロパティの見方、扱い方等
よし!お次は!!!
ユーザーフォームのプロパティの見方、扱い方、考え方について軽くイメージつけていくぞ!!
これまでのVBAと全く?違うのは、
プロパティを取得するんじゃなくて、自分で作っていく感じだ!!!!

例えば一番上の「Userform1」って文字を変えたければ…
プロパティウィンドウのCaptionプロパティの値を変更してあげよう!


ただ、大きさや位置に関しては、オブジェクト本体(左のやつ)を操作して変更することもできるぞ!

コントロールを追加する
お次はコントロールを追加する方法!!
え?コントロールって何?
ピッチャーの制球がいいことだぞ!(大嘘)


とりあえず「コマンドボタン(一番左下)」とゆ~やつを追加してみた!

そしてこのコマンドボタンのプロパティを変更したい時も、
プロパティウィンドウからできちゃう!!すごい!!

コマンドボタンにマクロを割り当てる
よし!!お次は…
さっき作ったコマンドボタンを押したら、マクロが実行できるようにしていくぞ!!!

そうすると…
標準モジュール的な画面に飛んで、新しくプロシージャができたね!!

そしたらこの中にマクロを書いていけばOK!!なんだけど…
一つ覚えてほしいのが、この「Unload Me」ってやつ!!!

Meって言うのがこのユーザーフォーム本体を表してるぞ!!
これは後々使うからな!
コンボボックスにセルの値を設定する
よし!お次!
ココからがやっと、今日の問題について触れていくぞん!!
コンボボックスに、セルの値を設定していくぞ!!
・・・え?コンボボックスって何?
えーとね!こういう感じのやつだ!↓

コンボボックスを挿入したい時は、ツールボックスから挿入してあげてくれ!


おっし!!!
ユーザーフォームのコツはつかめたぜ!!!と言いたいんだが…
ココで一つ、欠かせないことを紹介させてくれ!!
それがこいつ↓

UserForm_Initializeの使い方は神髄さんのサイトを見てくれたらいいと思う!!
今回の「都道府県のリストをコンボボックスに設定」するような操作は、
ユーザーフォームを起動した一回だけ!設定すればいいから…
この中に書いていこう!

中に書くコードはこんな感じでいいぞ!(神髄さんのサイトのコードほぼマルパクリ)

ここまでで一旦実行すると…↓

リストボックスにセルの値を設定する
よし!続いては…
リストボックスにセルの値を設定していくぞ!!
え?リストボックスって何??
・・・下のこいつ…

リストボックスはここから!

ほんで!こいつにセルの値を設定したいんだけど…
どのプロシージャに書けばいいか分かるか???
俺は間違えた!!
コンボボックスを変えた時に、コンボボックスの値に合わせてリストボックスを変更したいから、
コンボボックス_Changeのプロシージャに書くのが正解だ!


ほんで…何を書いていけばいいかって言うと…
リストボックスには、列数、見出しの有無を決めてあげてくれ!!
後一旦、全てのリストを表示するコードを書いてあげてるぞ!!

実行結果↓
コンボボックスを変更したタイミングで、リストボックスに値が入ったぞ!!選択された都道府県でフィルターする

選択された都道府県でフィルターする
よし!もうすぐ完成だ!!
コンボボックスに設定された都道府県によって、リストボックスの中身を変えてあげよう!
まず、コンボボックスで選ばれた値を取得!して、”都道府県”って変数(雑かよ)に代入↓

続いて、AutoFilterメソッドさんで、リストシートのA列をフィルター!

一旦ここまでで実行↓

選択された都道府県のみリストボックスへ表示
よし!これで最後!!
リストボックスへ表示するコードに変更して終わりにしよう!!!
そのために…「リストボックスへ表示するためのシート」を準備して進めていくぞ!

これは復習だから…ある程度スルーしながら進めちゃおっと!!w

これで実行してみると…↓

.RowSourceの部分を変更して、完成!!

実行結果↓

長かった…お疲れさまでした!

お疲れさままままMAX!

お疲れさまでした!
あとがたり
おはこんばんちは。uぷ主です。
67本目、初めてのユーザーフォームの問題でした…
嘘だろ~!
てか、やっぱりと言うか…
さすがにやるよね~!
VBA100本ノックだもんね!
100本もあるんだもんね!!
ユーザーフォームもやらないとね!!
とは言いつつ…何から動画にしよう…と迷った結果、
ユーザーフォームを挿入するところから、全部やったろやないかい!!と決意。
そしたら…動画時間20分超えて…
非常にきつかった…www
あ、ちなみにどうでもいいんですけど、1分の動画作るのに大体30分~2時間ぐらいかかるんですよ。うちのゆっくり動画って。
いやーでも、これは…やってよかったんじゃないですかね??
ユーザーフォームの作り方とか、最初しらんかったもんなぁ…
誰か一人でも役に立ってたらいいな!(そう思わないとやってられないww)
コメント