こんにちは、Ryoです。
ユーザーフォームを使用して何かを作成する場合、リストボックスは利用頻度も高いのではないかと思います。そのリストボックスには予め項目を設定しておく以外にも指定したセル範囲の値を利用することも可能なので、今回はその内容について書いていこうと思います。
1.サンプル概要
セルA1~A6 の範囲に以下の値が入力されており、その値をリストボックスの項目として設定します。
UserForm1のComaandButton1をクリックすることで、指定範囲のセルの値が設定されます。
2.サンプルコード
◆フォーム構成
サンプルで使用したフォームは以下の構成になっています。
◆サンプル1
Private Sub CommandButton1_Click() 'ユーザーフォーム1のリストボックス1に 'セルA1~A6範囲の値を設定する ListBox1.RowSource = _ Range(Cells(1, 1), Cells(6, 1)).Address 'Range("A1:A6").Addressでも可 End Sub
これでCommandButton1をクリックすることで、セルA1 ~A6の値をリストボックスの項目として設定できます。
このようにワークシートのセル範囲の値をリストボックスの項目として設定するにはRowSourceプロパティを使用します。
構文:オブジェクト.RowSource = string
サンプルではListBox1.RowSource = Range(Cells(1, 1), Cells(6, 1)).AddressのようにCellsを利用していますが、ここはコメントにもあるようにRange(”A1:A6”)でもOKです。
◆サンプル2(参考):他ワークシートの値を設定
用途によってはアクティブになっていない他のワークシートの値をリストボックスの値として設定したこともあるかと思いますので、その場合のサンプルコードは以下の通りになります。
Sheet3のセルA1 ~A6に入力された値をリストボックスの値として設定します。
このサンプルのユーザーフォーム等の構成は画像の通りです。
Sheet3のセルA1~A6は以下画像の値が入力されています。
Private Sub CommandButton2_Click() '他のワークシートの値を設定する場合 '例としてSheet3のA1~A6の値を 'リストボックスに設定 With Worksheets("Sheet3") ListBox2.RowSource = .Name _ & "!" & .Range("A1:A6").Address End With '他シートを参照する場合は '「シート名!セル範囲のアドレス」なので、 'Range指定は”A1:A6”で行う '(Range(Cells(*,*)...ではエラーとなる) End Sub
このサンプルを実行するとSheet3のセルA1~A6の値がリストボックスに設定されます。
実用的な面を考えると、この利用方法が多いかと思います。その際に設定する値は「シート名!セル範囲アドレス」になりますので、サンプルではListBox2.RowSource = .Name & “!” & .Range(“A1:A6”).Addressとしています。
3.まとめ
RowSourceプロパティを活用することで、ユーザーフォーム上のコードを都度修正しなくても入力するSheetやセルを決めておけば柔軟に対応することも可能になります。
記述も含めてすべて覚えるのはなかなか難しいのですが、何となくこういうことができると漠然と覚えておくだけでも今後利用する機会に思い出せますので、知っておくと良いかと思います。
以上、セル範囲の値をリストボックス項目として設定する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo