プロが教える店舗&オフィスのセキュリティ対策術

ユーザーフォームにて、ListBox1で選択した値で元データにフィルタをかけ、
その結果の特定列の値をListBox2に取り込もうとしています。

For文と、For内でIf文で回せば可能なのですが、数十万行あると処理が遅くなるので、
リストボックスのリストプロパティに一括で代入する等、他の方法を探しています。

現在のコード
Dim data As Worksheet
Set data = ThisWorkbook.Worksheets("data")

With data
.range("A1").CurrentRegion.AutoFilter 2, ListBox1
ListBox2.list = .Range(.Cells(1, 5).Offset(1, 0), .Cells(Rows.Count, 5).End(xlUp)).Value
End With

上記に近いコードで、一度別シートにコピーし、それをListBoxに読込む方法も考えました(テストしたけどコピーならうまくいく)が、
そこからさらに絞り込みたい場合に、また別シートを用意しなければならなくなりました。
ですので、できれば絞り込んだデータの値から取り出したいのです。

よい方法があれば、お教えください。
よろしくお願いします。

質問者からの補足コメント

  • せっかくご回答いただいき、実装して確かにうまくいったのですが、
    今回は諸々の都合上、元データを2次元配列に入れてカウンタ変数iで回す方法にしました。
    (元データを全て2次元配列に入れる作業が出てきたので、だったら最初からやれば?ってなった・・・)

    ですが、今後この方法が必ず役立つと思います。
    ありがとうございました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/08/28 03:35

A 回答 (2件)

ListBox2.List を使えば、配列やセル範囲で設定できますよね?

    • good
    • 0
この回答へのお礼

こちらのご回答に、とても興味があります。

答えやコードを求めているわけではないのですが、
よければもう少し詳しくアドバイスいただけないでしょうか?

勉強不足ですみませんが、よろしくお願いします。

お礼日時:2021/08/22 00:44

私もフィルタとリストで悩んでたところでした。



多分、この情報が役立つと思います。

オートフィルタの結果をリストボックスに表示させたいのですがどうしたら... - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/questio …

> Set tr = .Range("A2:A" & LRow).SpecialCells(xlCellTypeVisible)

SpecialCells(xlCellTypeVisible)
が、可視セルのみに絞り込みます。
この回答への補足あり
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。

> .SpecialCells(xlCellTypeVisible)

こんな表記があったんですね。初めて知りました。
それをターゲットレンジ変数に入れて、ぶん回す。
なるほど、納得しました。

ありがとうございました。

お礼日時:2021/08/22 00:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A