1.リストボックスで良く使用するワンポイント設定集 |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Excel 2010 Option :[Option Explicit] 参照設定: 使用 API: その他 : : |
1.実行時にリストボックス(ListBox)に新しい項目を追加する |
Private Sub Form_Load() '実行時にリストボックス(ListBox)に新しい項目を追加する With List1 .AddItem "あいうえお" .AddItem "かきくけこ" .AddItem "さしすせそ" .AddItem "たちつてと" .AddItem "なにぬねの" .AddItem "はひふへほ" .AddItem "まみむめも" .AddItem "や ゆ よ" .AddItem "らりるれろ" .AddItem "わをん" End With End Sub |
2.リストボックス(ListBox)の指定行を選択状態にする |
Private Sub Command1_Click() '指定の行を選択状態にする List1.Selected(CInt(Text1.Text) - 1) = True End Sub 図1.上記実行結果 ワザワザ、画像を付けるまでもないのですが、使用コントロールや配置図もかねて載せておきます。 |
3.リストボックス(ListBox)の指定行のデータを取得する |
Private Sub Command1_Click() 'リストボックス(ListBox)の指定行のデータを取得する Label1.Caption = List1.List(CInt(Text1.Text) - 1) End Sub |
4.リストボックス(ListBox)で選択されている項目を取得する |
Private Sub Command1_Click() '選択状態の場合なら(複数選択されている場合は、最後に選択した項目) Label1.Caption = List1.Text '複数の項目を選択した場合の取得 'List1.MultiSelect = 1 Dim i As Long For i = 0 To List1.ListCount - 1 If List1.Selected(i) Then Debug.Print List1.List(i), i + 1 End If Next i End Sub |
5.リストボックス(ListBox)に項目を追加挿入する |
Private Sub Command1_Click() List1.AddItem "★行末に追加挿入する場合★" List1.AddItem "★5行目に新たに追加する場合★", 5 - 1 End Sub |
6.リストボックス(ListBox)の指定行の項目を書き換える |
Private Sub Command1_Click() '指定行の項目を書き変えます List1.List(5 - 1) = "☆5行目を書換えました★" End Sub |
7.リストボックス(ListBox)の指定行を削除する |
Private Sub Command1_Click() '指定行(3行目)の項目を削除します List1.RemoveItem 3 - 1 '複数選択されている場合の削除方法(逆順に削除の事) Dim i As Integer For i = List1.ListCount - 1 To 0 Step -1 If List1.Selected(i) Then List1.RemoveItem i End If Next i '全て削除する場合 List1.Clear End Sub |
8.リストボックス(ListBox)の指定行をトップ位置に設定する |
Private Sub Command1_Click() '指定行をトップ位置に設定します List1.TopIndex = 5 End Sub |
9.リストボックス(ListBox)の選択した項目をクリップボードにコピーする |
Private Sub Command1_Click() '選択した項目をクリップボードにコピー Dim i As Long Dim ListDate As String With List1 For i = 0 To .ListCount - 1 If (.Selected(i)) Then ListDate = ListDate & .List(i) & vbCrLf End If Next i End With 'クリップボードを初期化 Clipboard.Clear 'クリップボードにコピー Clipboard.SetText ListDate End Sub |
10.CSVファイルを読み込み複数列をリストボックス(ListBox)に表示 |
fStrCut 関数及び fPadLeft 関数及び使用するデータは、MSFlexGrid/MSHFlexGrid に表示中のデータを罫線付きで印刷するで使用している物をお使い下さい。 Private Sub Command1_Click() List1.Clear List1.Visible = False Dim myString As String Dim lngFileNo As Long lngFileNo = FreeFile Open "dbtest.CSV" For Input As #lngFileNo Do Until EOF(lngFileNo) Line Input #lngFileNo, myString Dim myTxt() As String myTxt = Split(Replace(myString, """", ""), ",") If List1.ListCount = 0 Then List1.AddItem fStrCut(myTxt(1), 12) & fStrCut(myTxt(5), 10) & fStrCut(myTxt(6), 10) Else List1.AddItem fStrCut(myTxt(1), 12) & fPadLeft(Format$(myTxt(5), "#,### "), 9, " ") & _ fPadLeft(Format$(myTxt(6), "#,### "), 9, " ") End If Loop Close #lngFileNo List1.Visible = True End Sub 図2.上記実行結果 表示データを取り出す場合は、MID 関数等で、Trim$(Mid$(List1.List(3), 12, 9)) のようにして抜き出して下さい。 |
11.リストボックス(ListBox)に表示されているデータをテキストファイルに保存する |
Private Sub Command1_Click() Dim i As Long Dim intFileNo As Integer Dim strListTxt As String For i = 0 To List1.ListCount - 1 strListTxt = strListTxt & List1.List(i) & vbCrLf Next i intFileNo = FreeFile Open "ListTest.txt" For Output As #intFileNo Print #intFileNo, strListTxt Close #intFileNo End Sub リストボックス(ListBox)で使用しているコードは、ほとんどの物が、コンボボックスでも使用できます。 又、その逆にコンボボックスで使用しているコードは、リストボックス(ListBox)でも使用できますので双方のコードを見比べ活用するようにして下さい。 上記のファイルの読み込みや保存のコードは、同じです。 |
12.リストボックス(ListBox)で項目を右揃えで表示する |
Private Sub Form_Load() With List1 .Clear .Move 100, 100, 2800, 1500 .FontName = "MS ゴシック" .FontSize = 12 .AddItem fPadLeft("あ1いう", 22, " ") .AddItem fPadLeft("あ12いうえ", 22, " ") .AddItem fPadLeft("あ123いうえお", 22, " ") .AddItem fPadLeft("あ1234いうえおか", 22, " ") .AddItem fPadLeft("あ12345いうえおかき", 22, " ") End With End Sub '半角・全角が混在するような場合は、下記をお使い下さい。 Private Function fPadLeft(ByVal myData As String, ByVal CutLen As Long, ByVal CutStr As String) As String '文字を右寄せし、指定した文字列の文字数になるまで左側に指定した文字(0 や " " 等)を埋め込みます。 Dim tmp As String tmp = StrConv(RightB$(StrConv(String$(CutLen, CutStr) & myData, vbFromUnicode), CutLen), vbUnicode) fPadLeft = tmp End Function |
13.2つのリストボックス(ListBox)のスクロールの同期をとる |
フォームにリストボックスを2個貼り付け下記コードをペーストして試して下さい。 後は、どちらか一方だけの設定でいいと思います。 Option Explicit Private Sub Form_Load() Dim i As Long For i = 65 To 122 List1.AddItem Chr(i) List2.AddItem Chr(i) Next i End Sub Private Sub List1_Scroll() List2.TopIndex = List1.TopIndex End Sub Private Sub List2_Scroll() List1.TopIndex = List2.TopIndex End Sub |
14. |
15. |
検索キーワード及びサンプルコードの別名(機能名) |
リストボックスに関するサンプル集 ListBoxに関するサンプル集 |