【エクセルVBA】コンボボックスに値をセットする2つの方法 RowSourceプロパティとAddItemメソッド


 

ユーザーフォーム,コンボボックス皆様こんにちは、ノグチです。

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

前回は、ユーザーが値を入力したり、リストから選択したりできるコンボボックスをユーザーフォームに挿入する方法と、プロパティをいくつかご紹介しました。

【エクセルVBA】ユーザーフォームにコンボボックスを追加する方法
ユーザーフォームを作って使ってみるまでを目標に、連載記事でコントロールのメソッドやプロパティ、イベントをご紹介しています。今回の記事では、コンボボックスをフォーム上に追加する方法と、代表的なプロパティをいくつかご紹介しています。ユーザーフォームでツールを作りたいとき、使い勝手のよいコントロールですよ!

今回は、このコンボボックスに値をセットする方法のご紹介です。

コンボボックスのRowSourceプロパティでセットする方法と、コンボボックスのAddItemメソッドを使って値を追加する方法の2通りをご紹介していきますよ。

スポンサーリンク

前回までのおさらい

前回までに作成したユーザーフォームがこちら。

ユーザーフォーム,コンボボックス,おさらい用

前回の記事では、画面上部右側にあるコンボボックスを追加して、「CmbUnit」というオブジェクト名を付けたのでした。

今回は、このコンボボックスに値をセットしていきましょう。

コンボボックスに値をセットする2つの方法

今回の記事では、コンボボックスに値をセットする方法として以下の2つの方法をご紹介していきます。

  • RowSourceプロパティで、コンボボックスにセットしたい値があるワークシート上の範囲を指定する
  • ComboBoxオブジェクトのAddItemメソッドで新規アイテムを追加する方法

リストボックスでもご紹介した方法とほぼ同じですね。

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

早速RowSourceプロパティを使う方法から見ていきましょう。

RowSourceプロパティでワークシート範囲を指定する

まず1つめの、コンボボックスに表示したいリストがあるワークシート上の範囲を、RowSourceプロパティに指定する方法です。

例えば、こちらのワークシートのA2セルからA6セルの範囲を、コンボボックスに表示したい場合。

コンボボックス,ワークシート

プロパティシートのRowSourceプロパティの値に、このように「A2:A6」と入力します。

コンボボックス,プロパティシート

すると、このようにコンボボックスに指定したワークシート範囲の値が表示されるようになります。

コンボボックス,リスト表示,rowsource

AddItemメソッドで値を追加する

もう一つの方法、こちらはVBAから更新していきます。

ComboBoxオブジェクトのAddItemメソッドで、アイテムを追加する方法です。

記述方法はこちら。

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

追加したい順序は省略可能です。

省略した場合、自動的にコンボボックス内のリストの一番最後に追加されますよ。

AddItemメソッドでコンボボックスに入力した値をリストに追加してみる

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

コードはこちら。

Private Sub TextItem_AfterUpdate()
    With CmbUnit
        .AddItem TextItem.Value
    End With
End Sub

テキストボックスに入力した値を、コンボボックスの値にセットするコードです。

今回はテキストボックスのAfterUpdateイベントに入れてみました。

このコードを保存して、テキストボックスに値を入れてみると…

コンボボックス,リスト表示,additem

この通り、テキストボックスに入力した値が、コンボボックスの値に追加されていますね。

値をセットする方法はどちらかに統一する

リストボックスでも触れましたが、同一のコンボボックスに対して、RouwSourceプロパティとAddItemメソッドの両方を使って値を更新することはできません。

正確に言うと、RowSourceプロパティにワークシート範囲を指定していた場合は、AddItemメソッドで値を追加することができませんし、VBAからAddItemメソッドで値を追加した後にRowSourceプロパティに範囲をセットすると、AddItemメソッドで追加した値がRowSourceプロパティで指定した範囲の値で上書きされてしまいます。

コンボボックスの値をセットする方法は、RowSourceプロパティを使うか、AddItemメソッドを使うかのどちらかの方法に統一するようにしましょう。

最後に

今回は、コンボボックスに値をセットする方法として、RowSourceプロパティにワークシート範囲を指定する方法と、AddItemメソッドで新規アイテムを追加する方法の2つをご紹介しました。

以前の記事でご紹介した、リストボックスと同じセット方法ですね。

リストボックスとコンボボックスは、どちらもコントロール名に「ボックス」とつきますし、値が選択できるということで混同してしまうこともあるかもしれません。

しかし、コントロールに値をセットした後の見た目や、テキストが入力できる・できないなど、違いはしっかりありますので、目的に応じて使い分けていきましょう。

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


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