【エクセルVBA】リストボックスのListプロパティで複数列の値を更新する


ユーザーフォーム,リストボックス,Listプロパティ

皆様こんにちは、ノグチです。

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

前回記事では、リストボックスのAddItemメソッドで、リストボックスに、ワークシート範囲以外の値を追加する方法をご紹介しました。

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

しかしAddItemメソッドのパラメータを見てみると、1列分の値しかセット出来なさそうですよね…

AddItemメソッドでは1列の値しかセットできない…ということは、RowSourceプロパティでワークシートの範囲をセットしないと、VBAでリストボックスに複数列の値をセットすることはできないの?

いえいえ、ちゃんと複数列の値をセットすることができますよ!

ということで今回は、リストボックスのListプロパティで、2列目以降の値を更新する方法をご紹介します!

スポンサーリンク

前回までのおさらい

毎回の記事でご紹介していますが、前回までに作成しているユーザーフォームがこちら。

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

前回は、「品名」のテキストボックスに入力した値からこちらのワークシートを検索して、検索結果をユーザーフォームのリストボックスに、AddItemメソッドで追加していったのでした。

このAddItemメソッドで追加した行の2列目以降の値を、Listプロパティで更新する、というのが今回の主旨です。

Listプロパティとは?

リストボックスのListプロパティは、リストボックスの値の読み書きができるプロパティです。

Listプロパティでリストボックスの値を更新したい場合、下記のように記述します。

ListBoxオブジェクト.List(行, 列) = 値として表示したい内容

パラメータで、読み書き対象の行と列を指定するのですが、この行と列、0から数え始めますので注意が必要です。

Listプロパティでリストボックスの値を取得する

Listプロパティは、リストボックスにすでにある行の値を取得することができます。

例えばこちらのリストボックスの3行目にある値を取得したい場合。

こんなコードで取得することができます。(コマンドボタンのClickイベントを用いています。)

Private Sub btnOK_Click()
  MsgBox ListRegion.List(2, 0)
End Sub

こちらのコードを実行すると…

ユーザーフォーム,リストボックス,List,取得

この通りリストボックスの3行目にある値を取得して、メッセージで表示出来ていますね。

Listプロパティでリストボックスの値を更新する

Listプロパティは、リストボックスにすでにある行の値を更新することもできます。

例えばこちらのリストボックスの上から2行目の値を更新したい場合。

このように記述して更新することができます。

Private Sub btnOK_Click()
    MsgBox ListRegion.List(2, 0) = "すだち"
End Sub

そしてこちらのコードを実行すると、

ユーザーフォーム,リストボックス,Listプロパティ,更新

この通り、リストボックスの値を変更することができます。

AddItemメソッド行を追加して列の値をListプロパティで更新する

先に述べた通り、リストボックスのAddItemメソッドでは、リストボックスに新しい行を追加してくれます。

しかし、リストボックスのColumnCountプロパティで2以上の値が設定されていた(複数列の設定になっていた)としても、AddItemメソッドのパラメータで指定できるのは1列目にあたる値のみ。

そこでListプロパティとセットで使えば、新しく追加した行の2列目以降の値も更新することができます。

こんな感じで。

Private Sub TextItem_AfterUpdate()
    With ListRegion
        Dim i As Long
        i = .ListCount
        .AddItem TextItem.Value, i
        .List(i, 1) = TextItem.Value & "2列目"
        .List(i, 2) = TextItem.Value & "3列目"
    End With
End sub

AddItemメソッドでリストボックスに新しい行を追加して、1列目にはAdditemメソッドのパラメータでテキストボックスに入力された値をセットし、2,3列目はListプロパティで値を指定する、というコードです。

このコードを実行してみると…

ユーザーフォーム,リストボックス,Listプロパティ,複数列

この通り、2,3列目の値も更新されていますね。

もちろん、リストボックスのColumnCountプロパティの値を2以上に変更しておきましょう。

最後に

今回は、リストボックスのListプロパティで、複数列の値をセットする方法をご紹介しました。

VBAで複数列のリストボックスの値を更新したり、リストボックスの値を取得したい場合には必ずお世話になるプロパティですので、知っておいて損はないと思います。

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

連載目次:【エクセル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プロパティで複数列の値を更新する
  13. 【エクセルVBA】ユーザーフォームにコンボボックスを追加する方法
  14. 【エクセルVBA】コンボボックスに値をセットする2つの方法 RowSourceプロパティとAddItemメソッド

 


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