コントロール【ListBox】

ロゴ



The following two tabs change content below.
アバター

taka

あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪

コントロール【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

↑のようにサンプルデータが100件表示されたのではないでしょうか?

もし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フォロー

■YouTubeチャンネル登録

ファイルやコードの利用、WEBサイトの利用について

サンプルコードなどは当サイトの免責事項をよくお読みになってからお使いください。

Sponsored Link

 

WordPressでブログを始めるなら

WordPress簡単インストール&安心の安定性

レンタルサーバー Xserver

ロゴ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です