こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2010テーブルのデータをリストボックス

こちらで度々、お世話になっております。
Excel2010のテーブル内のデータをVBAで処理しているのですが、
フィルタリングした後のデータを直接リストボックスへ表示させようとしています。

しかし、下記の様に記述すると上手くいきません。

ListBox1.List = _
Worksheets("sheet1").ListObjects(1).Range.CurrentRegion.SpecialCells(xlCellTypeVisible).Value

これだと、フィルタリングの結果が

インデックス行
3行目
4行目
7行目

の様に”歯抜け”になると、インデックス行だけしかリストボックスに表示されません。

何とかフィルタリングの結果をリストボックスへ表示させて、
そのリストボックスの中から選択したデータをコピーしたいのです。

何か方法がありますでしょうか?
宜しくお願いします。

投稿日時 - 2013-09-01 04:22:32

QNo.8244623

困ってます

質問者が選んだベストアンサー

EntireRow.Hiddenプロパティを読んでまじめに分岐処理する方法や、Specialcells(xlCellTypeVisible)内の各Area内の各Cellについてループを回してAddItemという方法も考えられますが、Specialcells(xlCellTypeVisible)を別のシートにコピペすると、非表示行が切り詰めてペーストされる機能を生かすと、下記の様にできます。
ワークシートに置いたコントロールツールボックスのListBoxで試しています。当該シートモジュールに記載して下さい。
作業用のSheet2は真っ新なシートを指定しないとデータがすべて消えて泣けますのでご注意下さい。

Sub test2()
Dim refRange As Range

Sheets("Sheet2").Cells.Clear
Worksheets("sheet1").ListObjects(1).Range.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Sheets("Sheet2").Range("A1")
ListBox1.Clear
Set refRange = Sheets("Sheet2").Range("A1").CurrentRegion
'Set refRange = Intersect(refRange, refRange.Offset(1, 0)) '見出しCut
ListBox1.ColumnCount = refRange.Columns.Count
ListBox1.List = refRange.Value
End Sub

投稿日時 - 2013-09-01 16:49:03

お礼

やはり一度、ワークシートにコピーしないとダメですか。
テーブル機能って、VBAで処理するとなると
思ったよりも簡単には処理出来ないんですね。

ListBox1.List = Worksheets("1").ListObjects("teble1").Range.Value

こんな感じで、全ての範囲を一行の構文でリストボックスへ格納出来るあたりも気に入ってたんですが、
結局、条件を分けて処理しようとすると今までと変わらない処理になるんですね。

ちなみに今回は、
紹介頂いた別シートへのコピーに加えて、テーブル上の行番号を追加で貼付け、その行番号を元にテーブルデータを処理する方法にしました。

有難うございました。

投稿日時 - 2013-09-02 00:52:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

こんにちわ。
こちらに、いくつか設定の方法が載っています。
特に「配列を利用してリストに表示する項目を設定する」あたり、参考になるのではないでしょうか。
http://www.excel-vba.net/excel-userform-010.html
また、飛び地になっている場合、名前の定義を使うのも一案かと思います。
うまくいくといいですね。

投稿日時 - 2013-09-01 08:42:46

お礼

今回の問題は、テーブル機能がメインでしたので、
リストを詳しく知りたい場合に参考にさせて頂きますね。

有難うございました。

投稿日時 - 2013-09-02 00:43:24

あなたにオススメの質問