【エクセルVBA】AddItemメソッドでリストボックスに値を追加してみよう!


リストボックス,additem皆様こんにちは、ノグチです。

ユーザーフォームを作って使ってみるまでを目標に、連載記事でコントロールのメソッドやプロパティ、イベントをご紹介しています。

前回記事では、リストボックスのRowSourceプロパティにワークシートの範囲を指定することで、リストボックスにワークシートの範囲にある値を表示する方法をご紹介しました。

【エクセルVBA】リストボックスのRowSourceプロパティの値を変動させてみよう!
エクセルのユーザーフォームを作って使うことを目標に、連載記事でコントロールのメソッドやプロパティ、イベントをご紹介しています。今回は、リストボックスのRowSourceプロパティをVBAで指定することで、他のコントロールの入力値によってリストボックスに表示する値を変動させる方法をご紹介しています。

しかし前回記事では、「結局、リストボックスにはワークシート上の範囲にある値しか表示できないの?」というモヤモヤが残ってしまいました。

今回はそのモヤモヤを解消すべく、リストボックスのAddItemメソッドを使って、ワークシートの範囲ではない任意の値をリストボックスの値としてセットする方法をご紹介します。

前回までのおさらい

毎度おなじみ、前回までに作成したユーザーフォームがこちら。

ユーザーフォーム,リストボックス追加

前回は、「品名」のテキストボックスに入力した値からこちらのワークシートを検索して…

ユーザーフォーム,リストボックス,ワークシート

検索にヒットした値をワークシート上に書き出し、書き出した値を「生産地」リストボックスのRowSourceプロパティにセットして、リストボックスに検索結果を表示させたのでした。

そして、前回作成した検索用のコードがこちら。


今回は、こちらのコードを、リストボックスのAddItemメソッドを使った処理に置き換えていきましょう。

AddItemメソッドの記述方法

まずはAddItemメソッドの記述方法から。

リストボックスにRowSourceプロパティを使わないで値を追加する場合、AddItemメソッドを使って下記のように記述します。

ListBoxオブジェクト.AddItem 追加したい値(文字列型), 追加したい順序(数値型)

追加したい順序は、AddItemメソッドで追加しようとしている値をリストの何番目に入れたいのか、を指定するパラメータです。

省略可能で、指定しなければリストの一番下に入れてくれます。

指定したい場合は数値を指定すればよいのですが、先頭が1ではなく0ですので、注意が必要です。

3行以上あるリストの3番目に追加したい場合は、0から3つ数えて「2」を指定することになりますね。

AddItemメソッドでリストボックスに値をセットする

AddItemメソッドで検索結果をリストボックスに追加するコード

では早速、AddItemメソッドを使ってリストボックスに値を追加してみましょう。

コードはこちら。


前回のRowSouceプロパティを使う方法の、検索にヒットした値の処理部分を、AddItemメソッドでリストボックスに追加するように変更しています。

検索にヒットした値をAddItemメソッドでリストボックスに追加する

では早速、上のコードを実行してみましょう。

検索に使うワークシートは前回同様のこちら。

ユーザーフォーム,リストボックス,ワークシート

テキストボックスに「いちご」と入力して、ワークシートから検索してみます。

ワークシート上に「いちご」があるのはこちらの2行のみ。

ユーザーフォーム,リストボックス,AddItem,検索結果

なのでリストボックスには「福岡」と「栃木」が表示されるはずです。

テキストボックスにいちごを入力してみると…

ユーザーフォーム,リストボックス,AddItem

この通り、表示されてほしい値だけがAddItemメソッドでリストボックスに追加されていますね。

ユーザーフォーム,リストボックス,AddItem,検索結果,フォーム

RowSourceプロパティとの併用はできない

ここまでAddItemメソッドをご紹介してきましたが、注意点がひとつ。

それは、1つのリストボックスに対して、RowSourceプロパティとAddItemメソッドは併用することができないということです。

RowSourceプロパティでリストボックスの値をセットしていた場合、そのリストボックスに対して更にAddItemメソッドで値を追加しようとすると、こんなエラーになってしまいます。

ユーザーフォーム,リストボックス,AddItem,エラー

また、AddItemメソッドでリストボックスに値を追加していっても、その後でRowSourceプロパティでリストボックスの値を設定してしまうと、AddItemメソッドで追加した値が、RowSourceプロパティに設定したワークシート範囲の値で上書きされてしまいます。

RowSourceプロパティでセットした値の後に続けてAddItemメソッドで値を追加…や、その逆のような都合のよい使い方はできないということですね。

1つのリストボックスに対して何度も値を変更させたい場合は、値を追加する方法はAddItemメソッドでの追加か、RowSourceプロパティを使うかのどちらかに統一しましょう。

最後に

リストボックスのAddItemメソッドを使って、任意の値をリストボックスの値としてセットする方法をご紹介しました。

今回ご紹介したAddItemメソッドと、前回ご紹介したRowSourceプロパティ、ユーザーフォームでやりたいことによって使い分けられるとよいですね。

それでは、最後までお読みいただきありがとうございました!

連載目次:【エクセルVBA】ユーザーフォームを使ってみよう!

ユーザーフォームは、ちょっとした画面なら作れてしまう、便利な機能です。

何となく敷居が高いように感じてしまいますが、順を追っていけば難しいことはありませんよ。

  1. 【エクセルVBA】ユーザーフォームを作ってみよう!VBEでフォームを挿入する方法
  2. 【エクセルVBA】Showメソッドでユーザーフォームをコマンドボタンから開いてみよう!
  3. 【エクセルVBA】コマンドボタンのClickイベントとUnloadステートメントでユーザーフォームを閉じる方法
  4. 【エクセルVBA】テキストボックスのプロパティで入力を便利にしよう
  5. 【エクセルVBA】テキストボックスでよく使う3つのイベントを使ってみよう
  6. 【エクセルVBA】Initializeイベントでワークシートの値をユーザーフォームの初期値にセットする
  7. 【エクセルVBA】AfterUpdateイベントでテキストボックス同士を連動させてみよう
  8. 【エクセルVBA】コマンドボタンのClickイベントでワークシートを更新してみよう
  9. 【エクセルVBA】ユーザーフォームのリストボックスを使ってみよう!
  10. 【エクセルVBA】リストボックスのRowSourceプロパティの値を変動させてみよう!
  11. 【エクセルVBA】AddItemメソッドでリストボックスに値を追加してみよう!
  12. 【エクセルVBA】リストボックスのListプロパティで複数列の値を更新する

 

  投稿者プロフィール

ノグチフリーランスPG・SE
元製造子会社SE。
業務システム保守・導入両方やった経験をお伝えすることで、少しでもシステムや手作業に悩まされる人が減ればいいなぁと日々夢見ております。

タイトルとURLをコピーしました