2017年07月04日
ExcelVBA入門リストボックス
マイクロソフトアクセスの記事はこちら
人気ブログランキングへ
にほんブログ村
エクセル上にリストがあってそこから読み出す場合の方法
Excel上に上のようなリストがあったとします。
Private Sub CommandButton2_Click()
ListBox1.List = Range("F2:G17").Value
End Sub
上記のように範囲を指定(Range("F2:G17"))することも可能です。
これを実行すると下のようになります。
またこのような記述も可能です。
Private Sub CommandButton2_Click()
Dim i As Long
With ListBox1
For i = 2 To 17
.AddItem
.List(.ListCount - 1, 0) = Cells(i, 6)
.List(.ListCount - 1, 1) = Cells(i, 7)
Next i
End With
End Sub
上記はFor〜Nextを使用して、2行目から17行目までをリストにしています。
これも同じ結果が得られます。
また、将来的にリストに追記される場合も加味して考えてみましょう。
Private Sub CommandButton2_Click()
Dim i As Long
For i = 2 To Cells(Rows.Count, 6).End(xlUp).Row
ListBox1.AddItem Cells(i, 6)
Next i
End Sub
上記のように記述します。
結果は上のようになります。
少しVBAの記述について説明しましょう。
「Cells(Rows.Count, 6).End(xlUp).Row」ここが分かりにくいですね。
ここで最終行の取得を行っています。
通常データはドンドン縦(行)に増えていく傾向にあります。
そのような時、リスト範囲を限定出来ない時があります。
そのために最終行の取得を行う必要があります。
「6」というのは、現在リストがF列にあるのでアルファベットで
6番目なので「6」になっています。
Rows.Countですが、一旦一番下のセルに移動するという意味です。
「Ctrl」+「↓」で一番下まで行きますね。Excel2010なので「1048576行」に移動します。
次にEnd(xlUp)ですが、これは「Ctrl」+「↑」になり、一番下の行から上に向かって
移動します。
今回の場合データ範囲はF2〜F17なので17行目まで移動します。
これでForの繰り返しが2〜17になりますね。
また別の方法として下記のような記述も出来ます。
Private Sub CommandButton2_Click()
ListBox1.List = Range(Range("f2"), Cells(Rows.Count, 6).End(xlUp)).Value
End Sub
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6437297
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック