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

下記のコードでリストボックスを複数選択して
抽出する場合のやり方をおしえてくれませんでしょうか
下記のコードではうまく抽出できないのです。
添付ファイルもつけました。
お願い致します。

Private Sub CommandButton1_Click()
With ListBox1
If .ListIndex = -1 Then Exit Sub

For d = 0 To .ListCount - 1
If .Selected(d) = True Then
Range("a1").AutoFilter Field:=2, Criteria1:=.List(d)
End If
Next

End With
End Sub

「ListBox 複数選択 で オートフィ」の質問画像

A 回答 (3件)

こんな感じで。



Private Sub CommandButton1_Click()
 Dim a() As String
 Dim d As Long
 Dim cnt As Long

 With Me.ListBox1
  For d = 0 To .ListCount - 1
   If .Selected(d) Then
    cnt = cnt + 1
    ReDim Preserve a(1 To cnt)
    a(cnt) = .List(d)
   End If
  Next
  If cnt = 0 Then Exit Sub
  Range("a1").AutoFilter Field:=2, Criteria1:=a(), Operator:=xlFilterValues
 End With
End Sub
    • good
    • 3
この回答へのお礼

お時間があれば教えていただけますでしょうか。
    ReDim Preserve a(1 To cnt)
    a(cnt) = .List(d)

お礼日時:2019/08/29 22:42

何個選択するのかでも代わるかもですけど、検索していたらこのようなものが。



https://infoyandssblog.blogspot.com/2018/12/exce …
https://it-hitorigoto.com/several-autofilters/

検証はできないですが、『選択していない項目』をFilter関数で除外していけば(ループで変数を用いて)良いのではないかなぁ~~~~~~~と。
選択していないってのは無論

If .Selected(d) = False Then

になると思います。

ループ内で

status = Filter(status, .List(d) , False)

としたら出来るんじゃないかな?(未検証ですけど)
これなら個数は気にならない気もします。(再三ですが、未検証です)
    • good
    • 0

この様にしたいのかな?



Private Sub CommandButton1_Click()
Dim d As Long
Dim key1 As String, key2 As String
With ListBox1
If .ListIndex = -1 Then Exit Sub
For d = 0 To .ListCount - 1
If .Selected(d) = True Then
If key1 = "" Then key1 = .List(d)
If key1 <> "" Then key2 = .List(d)
End If
Next
Range("A1").AutoFilter 2, key1, xlOr, key2
End With
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございました参考にいたします

お礼日時:2019/08/29 23:28

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

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