この記事では、シートに設置されたListboxにデータを登録させる方法についてご説明します。
なお、今回はAdditemメソッドとListプロパティを使ってListboxにデータを登録させます。
【動画】シートに設置されたListboxにデータを登録させる実際の動き
本題に入る前に、まずは次の動画をご覧ください。
Additemメソッドの引数に追加したいデータを指定して実行、およびListプロパティに追加したいデータ追加することで、Listboxに表のデータが追加されます。
マクロ作成の流れ
実行すると、新しい列が追加されて、Additemメソッドの引数に指定された値がListboxに追加されます。
追加すると、追加したいデータが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週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。