Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2016)
検索用リストボックスの表示
投稿日時: 18/04/24 11:41:06
投稿者: 丘珠

下記コードを利用して検索しておりますが、 ListBox1に表示される項目を複数項目(A、C列)を表示したいのですがどこを修正追加すればいいのかわかりませんアドバイスをお願いします。
Private Sub UserForm_Activate()
      Dim i As Long
      lastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row + 1
      If lastRow <= 3 Then
        MsgBox "データがありません。"
        Exit Sub
      End If
      
      For i = 3 To lastRow
       ListBox1.AddItem Cells(i, 25)
      Next
    End Sub
      
    Private Sub 検索ボタン_Click()
      Dim searchName As String
      searchName = TextBox1.Text
      If searchName = "" Then
        MsgBox "検索する名前を入力してください。"
      Else
        Dim i As Long
        Dim no As Long
        For i = 0 To ListBox1.ListCount - 1
          If ListBox1.List(i) = searchName Then
            no = i
            ListBox1.ListIndex = no
            Exit For
          ElseIf i >= ListBox1.ListCount - 1 Then
            MsgBox "該当なし。"
            Exit For
          End If
        Next
        Index = no + 3
        Rows(Index).Select
      End If
    End Sub

回答
投稿日時: 18/04/24 13:48:30
投稿者: WinArrow
投稿者のウェブサイトに移動

丘珠 さんの引用:

下記コードを利用し て検索しておりますが、 ListBox1に表示される項目を複数項目(A、C列)を表示したいのですがどこを修正追加すればいいのかわかりませんアドバイスをお願いします。

 
質問
ListBox1のColumnCOuntは、どのような設定になっているのでしょうか?
 
(1)ColumnCount が「1」or未設定
  表示列は「1」となります。
  従って、A列セルとC列セルの「値」を文字列結合して代入する必要があります。
(2)ColumnCount=2の場合
  .AddItem Cells(i,"A").Value
    .List(.Listcount-1,1) = Cells(i,"C").Value
というぐあいになります。
 
ところで
> ListBox1.AddItem Cells(i, 25)
 
なぜ、Cells(i,25)なの?
 
※設定処理を
>Private Sub UserForm_Activate()
で実行するばあいは、
ListBox1をクリアするコードを入れた方がよいでしょう。
 
 
※ Private Sub 検索ボタン_Click()
の中にも無駄なコードが見受けられます。
次の機会に・・・・機会があったらご説明します。
 

回答
投稿日時: 18/04/24 14:02:07
投稿者: WinArrow
投稿者のウェブサイトに移動

ループさせないで
Listbox1に設定する方法
一つのテクニックとして、覚えておくと便利です。
 
    With Sheets(1)
        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
         
    With Me.ListBox1
        .ColumnCount = 3
        .ColumnWidths = "100;0;100"
        .List = Range("A3").Resize(LastRow, 3).Value
    End With

投稿日時: 18/04/25 14:20:06
投稿者: 丘珠

皆さんありがとうございます。
コード的にはまだまだ幼稚かもしれませんが納得いく動きができました有難うございました。