[[20200619135209]] 『VBAオートフィルタで非表示にしたものは無効にしax(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAオートフィルタで非表示にしたものは無効にしてフィルタをかけたい』(初心者)

別の質問で解決しましたと書きましたが、解決してなかったので
すみませんがまた新規投稿の形で質問させていただきます。

以下のように、フィルタでセル3列目が「建仮」というものだけを表示させたのですが、
その次のフィルタ(セル25列目で「JF」「JS」を表示)が先のフィルタで表示させなかったものも含んでフィルタをかけてしまいます。

結果、「建仮」でなくても「JF」か「JS」が入っているものは表示されてしまいます。「建仮」で「JF」か「JS」が入っているものを表示するにはどうすればよいでしょうか?

Dim ブックパス As String
ブックパス = Application.GetOpenFilename("ブック, *.xlsx")
If ブックパス = "False" Then
MsgBox "キャンセルされました"
Else
With Workbooks.Open(ブックパス).Worksheets("明細")

       .Activate
    .AutoFilter.Range.AutoFilter Field:=3, Criteria1:=Array _
                ("建仮"), Operator:=xlFilterValues

     .AutoFilter.Range.AutoFilter Field:=25, Criteria1:=Array("JF", "JS"), Operator:=xlFilterValues
End With
End If
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows10 >


考え方は正しいようですが、.AutoFilter.Range.AutoFilter って、フィルタの指定を間違えていませんか?
例えば、データ範囲が A1:Y100 の場合は、以下とか。
        .Range("A1:Y100").AutoFilter Field:=3, Criteria1:=Array("建仮"), Operator:=xlFilterValues
        .Range("A1:Y100").AutoFilter Field:=25, Criteria1:=Array("JF", "JS"), Operator:=xlFilterValues
(???) 2020/06/19(金) 14:17

データ範囲は作業をするたびに変わってしまうのです。

ひとつ前に質問していたのがその問題で、
作業をするデータのフィルタをかけるデータ範囲を毎回取得しないといけないかと私は思ったのですが、

With Workbooks.Open(ブックパス).Worksheets("明細")

      .Activate
     .AutoFilter.Range.AutoFilter Field:=25, Criteria1:=Array("JF", "JS"), Operator:=xlFilterValues
End With

という記述の仕方を教えていただき、ひとまずフィルタ一つだけだと機能するので解決しましたとコメントしました。
そしてフィルタをもう一つ追加したところ、今回の問題が発生しました。
(初心者) 2020/06/19(金) 14:23


[[20200619103808]] 『フィルタの適用範囲を調べてそのフィルタを利用したい』(初心者)
↑より続く。

建仮の抽出がおかしいです。(配列にする必要がない)

    Sub さんぷる2()
        Dim ブックパス As String

        ブックパス = Application.GetOpenFilename("ブック, *.xlsx")
        If ブックパス = "False" Then
            MsgBox "キャンセルされました"
        Else
            With Workbooks.Open(ブックパス).Worksheets("明細")
                .Activate
                .AutoFilter.Range.AutoFilter Field:=3, Criteria1:="建仮"
                .AutoFilter.Range.AutoFilter Field:=25, Criteria1:=Array("JF", "JS"), Operator:=xlFilterValues
            End With
        End If
    End Sub

(もこな2 ) 2020/06/19(金) 14:25


もこな2さん

すみません、説明を簡単にするために省略したのが悪かったです。

「建仮」以外にも「管理調整」があります。

 .AutoFilter.Range.AutoFilter Field:=3, Criteria1:=Array _
                ("管理調整", "建仮"), Operator:=xlFilterValues

(初心者) 2020/06/19(金) 15:09


えっと、私のコードで100固定で書いたのはあくまでも例であって、行末の数値に変えるのですよ?
他で行末を得ていないのであれば、.Range("A1:Y100") ではなく、以下とか。
    Dim iR As Long
    …
        iR = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Range("A1:Y" & iR).AutoFilter …

ちなみに、Y の部分も、実際のデータ末尾列に合わせて変えてくださいね?
(???) 2020/06/19(金) 15:37


???さん

ありがとうございます、できました!
(初心者) 2020/06/19(金) 16:12


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.