【ExcelVBA】シートに設置されたListboxにデータを登録させるには(Additemメソッド・Listプロパティ使用)

この記事では、シートに設置されたListboxにデータを登録させる方法についてご説明します。

なお、今回はAdditemメソッドとListプロパティを使ってListboxにデータを登録させます。

【動画】シートに設置されたListboxにデータを登録させる実際の動き

本題に入る前に、まずは次の動画をご覧ください。


Additemメソッドの引数に追加したいデータを指定して実行、およびListプロパティに追加したいデータ追加することで、Listboxに表のデータが追加されます。

マクロ作成の流れ

STEP.1
Additemメソッドの引数に追加したいデータを指定して実行する
Additemメソッドの引数に追加したいデータを指定して実行します。
実行すると、新しい列が追加されて、Additemメソッドの引数に指定された値がListboxに追加されます。
STEP.2
Listプロパティに追加したいデータ追加する
Listプロパティに追加したいデータ追加します。
追加すると、追加したいデータが2列目以降に追加されます。
STEP.3
表の行数分STEP.1とSTEP.2を繰り返す
表の行数分STEP.1とSTEP.2を繰り返します。

Excelファイルの例

今回は次のExcelファイルを用意しました。

Listboxとデータがある表があり、追加ボタンをクリックするとListboxに表のデータが登録されて表示されます。

コードの例

Option Explicit

Private Sub btn_exec_Click()

    Dim rCnt As Long                    'カウンタ(行用)
    Dim CCnt As Long                    'カウンタ(列用)
    
    Const tCelRowPos As Long = 3        '表の行位置
    Const tCelColPos As Long = 7        '表の列位置
    Const tRowCnt As Long = 15          '表の列数
    Const tColCnt As Long = 4           '表の列数
        
    With ListBox1
    
        'Listboxのデータをクリアする
        .Clear
    
        'Listboxの列数を設定する
        .ColumnCount = tColCnt
            
        For rCnt = 0 To tRowCnt - 1
              
            'Listboxに新しい行を追加し、1列目に表の1列目の値をセットする
            .AddItem Worksheets("top").Cells(tCelRowPos + rCnt, tCelColPos).Value, rCnt
            
            For CCnt = 1 To tColCnt
            
                'Listboxに値を設定する(2列目以降)
                .List(rCnt, CCnt) = Worksheets("top").Cells(tCelRowPos + rCnt, tCelColPos + CCnt).Value
                    
            Next
        
        Next rCnt

        'Listboxの列の幅を設定する
        .ColumnWidths = "20;70;90"
        
    End With

End Sub

注目すべきコード①

最初に見て頂きたいのは16行目から19行目です。

        'Listboxのデータをクリアする
        .Clear
    
        'Listboxの列数を設定する
        .ColumnCount = tColCnt

コードの説明

以上のコードは、Listboxのデータをクリアし、Listboxの列数を設定する処理のコードです。

Listboxにデータを追加する前にまずはListboxのデータをクリアします。

次にColumnCountプロパティにListboxの列数を設定します。

今回のサンプルの表ではデータは4列あるので、4の値が設定された定数tColCntをColumnCountプロパティに設定しています。

tColCntは下の行で4の値で宣言しています。

    Const tColCnt As Long = 4           '表の列数

注目すべきコード②

次に見て頂きたいのは21行目です。

        For rCnt = 0 To tRowCnt - 1

コードの説明

以上のコードは、表の行数分繰り返すFor文のコードです。

今回のサンプルの表ではデータが15行あるので、For文で15回処理を繰り返します。

tRowCntは下の行で15の値で宣言しています。

    Const tRowCnt As Long = 15          '表の列数

注目すべきコード③

次に見て頂きたいのは24行目です。

            'Listboxに新しい行を追加し、1列目に表の1列目の値をセットする
            .AddItem Worksheets("top").Cells(tCelRowPos + rCnt, tCelColPos).Value, rCnt

コードの説明

以上のコードは、Listboxに新しい行を追加し、1列目に表の1列目の値をセットする処理のコードです。

AddItemメソッドの1つ目の引数に表の1列目の値を、2つ目の引数には追加する対象のデータが何行目なのかを指定して実行します。

AddItemメソッドを実行するとListboxに、AddItemメソッドの1つ目の引数に指定した表の1列目の値が追加されます。

注目すべきコード④

次に見て頂きたいのは26行目です。

            For CCnt = 1 To tColCnt

コードの説明

以上のコードは、表の列数分繰り返すFor文のコードです。

今回のサンプルの表ではデータが4列あるので、For文で4回処理を繰り返します。

tRowCntは下の行で4の値で宣言しています。

    Const tColCnt As Long = 4           '表の列数

注目すべきコード⑤

次に見て頂きたいのは29行目です。

                'Listboxに値を設定する(2列目以降)
                .List(rCnt, CCnt) = Worksheets("top").Cells(tCelRowPos + rCnt, tCelColPos + CCnt).Value

コードの説明

以上のコードは、Listboxに2列目以降に表のデータを設定する処理のコードです。

Listプロパティの引数にはListboxのどの位置に値を設定するかを指定し、その表の位置に対して値を設定します。

Listプロパティの1つ目の引数にはListboxの何行目かを、2つ目の引数にはListboxの何列目かを指定します。

例えば1つ目の引数に2が、2つ目の引数に3が設定されると、Listboxの3行目の4列目に値が設定されます。
(※行と列は0番目から始まるので、引数の値に対してListboxに設定される位置は1つ値が多くなります)

注目すべきコード⑥

次に見て頂きたいのは36行目です。

        'Listboxの列の幅を設定する
        .ColumnWidths = "20;70;90"

コードの説明

以上のコードは、Listboxの各列の幅を指定する処理のコードです。

ColumnWidthsプロパティに値を指定することで、列幅を設定することができます。

Listboxの列が複数の場合は「;」区切りで値を結合させてColumnWidthsプロパティに設定します。

動作確認

マクロ実行前

今回は以下のExcelファイルを用意しました。

表のデータをListboxに登録させます。

マクロ実行後

追加ボタンをクリックするとマクロが実行されて、Listboxに表のデータが登録されて表示されました。

最後に

本記事では、シートに設置されたListboxにデータを登録させる方法についてご説明しました。

シートに設置されたListboxにデータを登録させたい時は本記事を参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら