VBAでツールを作るときに使うユーザーフォームを使うかと思います。
そのユーザーフォームで使う複数のコンボボックスやリストボックスで同じ項目を扱いたい時があります。
そんなとき、コードでは同じことを繰り返し記述する必要があるので、少々鬱陶しいコードになってしまいます。
なので、本記事ではその対策について解説していきます。
ほぼ同じ内容を繰り返すコードはスマートではない
例えば、下のようにユーザーフォームがあったとします。
上のユーザーフォームでは「りんご・みかん・メロンの3つの果物の順位をつける」という内容となっています。
なので、このフォームで設置された3つのコンボボックスには「りんご」「みかん」「メロン」の3つの果物の選択肢がそれぞれに用意されている必要があります。
そして、シンプルにコードを書くと下のようなコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub UserForm_Initialize() With UserForm1.ComboBox1 .AddItem "りんご" .AddItem "みかん" .AddItem "メロン" End With With UserForm1.ComboBox2 .AddItem "りんご" .AddItem "みかん" .AddItem "メロン" End With With UserForm1.ComboBox3 .AddItem "りんご" .AddItem "みかん" .AddItem "メロン" End With End Sub |
上では指定するコンボボックスが違うだけで、ほぼ同じ内容となっています。
これだとコード的にスマートではないです。
複数のコンボボックスで同じ値を設定する方法
上のコードの項目指定はスマートではありません。
なので、同じ項目のコンボボックスはまとめて設定したいと思います。
その方法は下のとおりです。※わかりやすくするためにあえて省略していない部分があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Private Sub UserForm_Initialize() Dim arrayNames As Variant Dim arrayName As Variant arrayNames = Array("ComboBox1", "ComboBox2", "ComboBox3") For Each arrayName In arrayNames With UserForm1.Controls(arrayName) .AddItem "りんご" .AddItem "みかん" .AddItem "メロン" End With Next End Sub |
5行目:配列に「同じ項目を扱うコンボボックスのオブジェクト名」を格納する。
7行目:For Each文でコンボボックスのオブジェクト名が入った配列の要素数分、処理を繰り返す。※For文を詳しく知りたい方はFor文の使い方を確認ください。
8~12行目:3つのコンボボックスの項目を設定する。
上のように同一の項目を扱うコンボボックスのオブジェクト名を配列に入れちゃって、それをFor Each文で処理すると、コードでは同じことを書かなくてよくなります。
〇おすすめのVBA参考書ランキング!
1位 | 2位 | 3位 |
---|---|---|
Excel VBA 脱初心者のための集中講座 | パーフェクトExcel VBA | ExcelVBA 実戦のための技術 |
初心者~中級者 | 中級者 | 初心者~中級者 |
【初心者が手に取るべき参考書】 ・「書籍+動画」で圧倒的に理解しやすい入門書になっている。 ・丁寧で詳しい解説でボリューム感がある。 | 【より深い理解をしたい方にお勧めな参考書】 ・テーマに対して丁寧な解説・適度な深さで解説されている。 ・幅広くテーマを扱っていることから、基礎知識をあらかた網羅できる。 | 【入門書と一緒に買うべき参考書】 ・1つ1つのテーマを経験豊富なエンジニア視点で解説してくれている。 ・実践的で効果的なコードの書き方が理解できる。 |
【読んでみた一言】 正直、入門書はコレ一冊でいいかも。あとは中級者用の参考書に進むべし。 | 【読んでみた一言】 深く書かれているが、少々専門的に書かれていることから、読む前に数冊の入門書を読破したほうが良い。 | 【読んでみた一言】 基礎知識を持っている人が次のレベルに達するきっかけを与えてくれる参考書である。 |
スポンサーリンク