
リストボックスにリストを追加する方法

リストボックスを使っているとリストにない項目を追加したい時ありませんか?
せっかくオリジナル入力フォームを使ってエクセルの作業を自動化しているのだから、ワークシートのセルに直接追加項目を入力するのではなく、フォーム上で行えばとてもスムーズですよ。
AddItem+テキストボックスで入力文字をリストに反映
リストボックスにリストをVBAコードを使って記述するのに使う「AddItem」をちょっと追加して使えます。
リストボックス自体には直接文字入力はできないので、テキストボックスと追加実行するコマンドボタンを使います。
リストの最後に追加する

表示されているリストボックスのリストの最終行に追加できる基本的な方法です。
Private Sub CommandButton1_Click()
i = TextBox1.Value
ListBox1.AddItem i
End Sub
- コマンドボタン1が押されたら
- 変数「i」に格納するのはテキストボックス1の入力文字
- リストボックス1に変数「i」をリスト追加する
- マクロ記録終了
ちょっとややこしく感じてしまうのが変数「i」かもしれませんが、「i」の1文字の代わりに分かりやすくすれば、「Range(“A1”).value」と書けばわかりやすいかもしれませんね。
Range(“A1”).valueとすれば、テキストボックス1に入力した文字をわざわざセルA1に記載してから、リストに追加する時にセルA1に記載されている文字をリストに追加するという事です。
テキストボックス入力文字➡セルA1記載➡セルA1読取り➡リスト追加
変数「i」を使うとセルを経由しないでできる
テキストボックス入力文字➡変数「i」で格納➡格納した文字をリスト追加
どちらも正解なのでプログラムは正常に動きますのでご安心してね。
ちなみに、リストが空欄の場合は最初に入ります。

追加されたリスト「あああ」を選択ボタンで任意のセルへ記載することも可能になりますので、例えばセルA1に追加したリストを記載するには、Range(“A1”).Value = ListBox1.ValueとVBAコードを書けば完成です。
セルに記載するにはコマンドボタンを押すことですが、1列だけではなく2列以上の複数列もかのうなのですが、ここでは省略しますので下記をご覧くださいませ。

ただしこの方法は、永久にリストに追加できるわけではなく一時的なものなので、UserForm_Initializeを使ってユーザーフォームを再度表示させると元通りにリストには含まれていません。
リストの途中に挿入追加する(固定)

今度はあらかじめ決めている場所(リストの途中の行)に追加したいリストを抽入追加させることもできます。
この方法はVBAコードで上記で使った「ListBox1.AddItem i」の「i」の後ろに追加したい行数を付け加えるだけです。
ここでは、3行目に「北海道に行きたい」を抽入追加させています。
Private Sub CommandButton1_Click()
i = TextBox1.Value
ListBox1.AddItem i, 3- 1
End Sub
上記のように「i」の後ろに赤字で書いた,3-1を付け加えたことにより、3列目に「北海道に行きたい」がリスト抽入追加できました。
なぜ「3」ではなく「3-1」?
と思うかもしれませんが、リストボックスのリストは先頭行が「1」ではなく「0」なので、マイナス1をしないと、0,1,2,3なので4行目になってしまうからです。
この方法も、永久にリストに追加できるわけではなく一時的なものなので、UserForm_Initializeを使ってユーザーフォームを再度表示させると元通りにリストには含まれていません。
リストの途中に行数を指定して抽入する

先ほどのは、VBAコードであらかじめリストに抽入追加できる行が決まっていましたが、テキストボックスを1つ追加して、好きな行に抽入追加できるようにもできます。
Private Sub CommandButton1_Click()
i = TextBox1.Value
ListBox1.AddItem i, TextBox2.Value – 1
End Sub
全く難しいことはなく、先ほどの3-1の部分を使いしたテキストボックスに代えただけです。

まあ、どちらにしても一時的な追加なので行数を気にする必要もないと思いますが、こんなことも可能という事で、参考になるかな?
セル範囲を自動取得してリストに反映
先ほどのリストボックスに追加する方法は一時的なのもでしたが、恒久的に追加すしたい場合もあります。
そこで、リストボックスに反映したいセルの範囲で最終入力行を探してリストに反映させる方法を活用しましょう。
方法は簡単で、先ほどの追加するコマンドボタンと下記に記載した「入力済み範囲を自動取得してリストボックスのリスト化」を組み合わせれば完成なので、難しくはないと思いますので、ぜひ参考にしてくださいね。
