
taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
コントロール【ListBox】
どうもtakaです、今回は数あるVBAのコントロールの中でも一番奥深いと個人的に思っている【ListBoxコントロール】についてご紹介していきたいと思います( ^ω^ )
Listboxコントロールとはその名の通りデータのリストを表示させるコントロールです、Excel上に保存された文字列のデータをList状に表示させることで可読性を向上させるなどの効果が期待できます(^^♪
ListBoxコントロールの設置
ListBoxコントロールはデフォルトで用意されています。




ListBoxコントロールの使い方
Listboxへデータを表示させる方法など簡単な使い方をご紹介していきます(^^♪
Listboxにデータを表示させる方法
まずListboxにデータを登録するには【Additemメソッド】を使用します、まず↓のようなフォームを用意してボタンを押して下記のコードを実行してみてください。


Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 100 ListBox1.AddItem "サンプルデータ" & i Next i End Sub
もしExcelのセルのデータを取得したい場合は↓のようにAddItem にセルを指定してあげればOKです(^^)b
Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 100 ListBox1.AddItem Cells(i, 1).Value Next i End Sub
選択されている位置・データの取得
Listboxで選択しているデータを取得するには【Textプロパティ】、選択されているかを取得するには【LisutIndexプロパティ】を使用します。
下記のコードは先ほどの状態のListboxをクリックすると選択された位置とデータを取得します
Private Sub ListBox1_Click() MsgBox ListBox1.ListIndex & "の" & ListBox1.Text & "を選択中" End Sub


Listboxの位置は一番上が【0】から始まります、なので上記の画像は【位置が9、サンプルデータ10を選択】しているという状況になるのです(;´・ω・)
Listboxのデータの件数を取得する
Listboxのデータの件数を取得するには【Listcountプロパティ】を使用します(^^♪
Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 100 ListBox1.AddItem "サンプルデータ" & i Next i MsgBox ListBox1.ListCount End Sub


リストの表示方法②
今までListboxの表示させるのに【For~Next】を使用してご紹介してきました、ですがこの方法は数が少ないときよく使う方法です(;´・ω・)
というのもこの方法ですと数千、数万のデータを表示させるときに時間がかかってしまうからです(;^ω^)
試しに2万件のサンプルデータをListboxに表示させてみます。
使用したコードはこちらです
Private Declare Function GetTickCount Lib "Kernel32" () As Long Private Sub CommandButton2_Click() S = GetTickCount Dim i As Integer Dim LastRow As Integer LastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To LastRow ListBox2.AddItem Cells(i, 1).Value Next MsgBox (GetTickCount - S) / 1000 & "秒" End Sub


何度かやりましたが結果は1秒後半でした(PCスペックによると思いますが・・・
次に【Listプロパティ】を使用して表示させる方法を実行してみます。
Private Declare Function GetTickCount Lib "Kernel32" () As Long Private Sub CommandButton1_Click() Dim S As Long Dim LastRow As Long S = GetTickCount LastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row ListBox1.List() = Worksheets("Sheet1").Range("A1:A" & LastRow).Value MsgBox (GetTickCount - S) / 1000 & "秒" End Sub


0.016秒という驚異的なスピードで終了しました(笑)予想より差が出て自分でもびっくりです(;´・ω・)
ListBoxに登録されているデータというのは配列形式に格納されて、これはListプロパティで操作できますので、このデータを表示させることで【For~Next】では時間がかかってしまう処理も一瞬で終わるようになります(^^♪
フォロー・チャンネル登録お願いします
VBA以外についてのブログはこちら↓
https://yb-log.com/■Twitterフォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す