Excel (VBA)

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

 
(指定なし : 指定なし)
検索結果をリストボックスに表示させる際、項目名も表示させたい
投稿日時: 22/11/20 15:40:07
投稿者: マイルストン

いつもお世話になっております。
 
下記のコードを記載し、検索結果をリストボックスに表示させています。
検索結果上手く表示されるのですが、最上段に項目名(NO、日付等)も表示して
検索結果をより分かりやすく表示させたいのですが、どのようにコードを記載すれば
よいのかが分かりません。
何卒、ご教示のほどよろしくお願いいたします。
 
 
Private Sub TextBox9_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 
  
  'Enterキー以外は、終了
  If KeyCode <> vbKeyReturn Then Exit Sub
 
   
  ListBox1.Clear 'リストボックスをクリア
  ListBox1.ColumnCount = 4 '4列にする
  For i = 4 To Cells(Rows.Count, "B").End(xlUp).Row
    '検索値を含む場合
    If InStr(Cells(i, "C"), TextBox9.Value) > 0 Then
      With ListBox1
        .AddItem "" '行を追加
        .List(.ListCount - 1, 0) = Cells(i, "A") 'Noを取得
        .List(.ListCount - 1, 1) = Cells(i, "B") '日付を取得
        .List(.ListCount - 1, 2) = Cells(i, "C") '対応者を取得
        .List(.ListCount - 1, 3) = Cells(i, "D") '対応内容を取得
      End With
    End If
  Next

回答
投稿日時: 22/11/20 22:28:40
投稿者: WinArrow
投稿者のウェブサイトに移動

ListBoxには、
ColumnHeads(True/False)というプロパティがあります。
そして、Rowssourceプロパティでセル範囲を指定します。
 
ColumnHeads = True を指定すると、
セル範囲の一つ上の行が項目として使われます。
 
しかし、Rowssourceにセル範囲を指定すると
AddItemは使えません。
 
両者は両立しないので、
Additemをやめてセル範囲を取込む方法を検討してみてください。
 

回答
投稿日時: 22/11/22 22:49:50
投稿者: simple

既にご指摘のあったとおりかと思います。
 
下記サイトにも関連記事(具体例)がありますので、
参考になるかもしれません。
「リストボックスの値リストに列見出しを表示する設定ColumnHeadsで
 見出しが設定できない理由(Excel VBA)」
https://happy-tenshoku.com/post-5592/

回答
投稿日時: 22/11/23 14:14:10
投稿者: hatena
投稿者のウェブサイトに移動

Rowssourceを使うなら、
ソースの表にフィルターかけて、それを作業域にコピーして、それをRowssourceに設定するということになりますね。下記が参考になるでしょう。
 
フィルターの結果をリストボックスに表示させる: 縁木求魚
https://engi.cocolog-nifty.com/sirenai/2014/01/post-2203.html
 
現状のAddItemでいくなら、ColumnHeadsで見出しを表示するのはあきらめて、リストボックスの上にラベルを配置してそこに見出しを表示するとかでどうでしょう。
これなら、見出しを太字にするとか背景色を変更するとか、デザインの自由度も高いと思いますが。

投稿日時: 22/11/27 14:47:55
投稿者: マイルストン

みなさま
 
ご回答ありがとうございます。
色々とご教示いただき大変勉強になりました。
 
hatena様から教えていただいた下記のように対応したいと思います。
 
>現状のAddItemでいくなら、ColumnHeadsで見出しを表示するのはあきらめて、リストボックスの上にラベルを配>置してそこに見出しを表示するとかでどうでしょう。
 
みなさま、お忙しいところご回答いただき本当に感謝いたします。
日々精進して勉強してまいりたいと思います。