[[20200619103808]] 『フィルタの適用範囲を調べてそのフィルタを利用し』(初心者) ページの最後に飛ぶ

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

 

『フィルタの適用範囲を調べてそのフィルタを利用したい』(初心者)

色々やってみましたが実行時エラーが出てしまいます。
助けていただきたいです;

【やりたいこと】
14行目にフィルタがかかっているシート1がある。
毎月、フィルタがかかったデータ数は変動する。
25列目に「事業部」という項目があり、その中の「JF」「JS」にチェックを入れたい。(実際には20個くらいチェックが必要なので、自動化したいです)

【作ってみたプログラム】
★のところで「オブジェクト変数またはWithブロック変数が設定されていません」とエラーが出る。Withを入れてみたりDimの型を変えてみたりしましたが解決できず・・・。

Sub i()
Dim ws1 As Worksheet
Dim Hani As Range

'加工するファイルを開いて作業シートを指定する
Dim ofn As String
ofn = Application.GetOpenFilename("ブック, *.xlsx")
If ofn <> "False" Then

   Workbooks.Open (ofn)
Else
    MsgBox "キャンセルされました"
End If
Set ws1 = Worksheets("明細") '明細シート をws1とする

'オートフィルターの適用範囲を調べる→毎月範囲が変わるので
ws1.Activate
★Hani = ActiveSheet.AutoFilter.Range.Address

'Y列「事業部」でJF,JSをチェックする
ActiveSheet.Range("Hani").AutoFilter Field:=25, Criteria1:=Array( _

        "JF", "JS), Operator:=xlFilterValues
End Sub

どうぞよろしくお願いいたします。

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


 Dim Hani As Range

とされているのですから、Setしないとダメですよね?
さらに、addressプロパティは【文字列】を返すものでRangeオブジェクトは返しません。
したがって

 Set Hani = ActiveSheet.AutoFilter.Range

と修正すればよいとおもいます。

(もこな2 ) 2020/06/19(金) 10:57


ちなみに、コンパイルエラーにならないことしかチェックしてませんが、提示されたコードを整理するとこんな感じになりませんか?
    Sub 整理()
        Dim ブックパス As String

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

(もこな2 ) 2020/06/19(金) 11:17


もこな2 さん

整理してくださってありがとうございます。
こんなにシンプルにできるんですね。

VBAの記述の仕方は全く理解していないので
いろんなところから事例をひっぱってきてうまくいくように
切り貼りしたりしていたのでごちゃごちゃしていました;
とても助かりました。
(初心者) 2020/06/19(金) 12:45


すみません、整理していただいたコードにフィルタの選択をもう一つ追加(下記?@)したのですが、これだと一つ目に選択したフィルタで表示されなかったものまで二つ目のフィルタ(下記?A)で選択されてしまいます。
複数フィールドにフィルタをかける場合は、複数AutoFilterを記述すればよいとテキストには書いてあるのですが・・・。どうすればよいでしょうか?

Sub 整理()

        Dim ブックパス As String
        ブックパス = Application.GetOpenFilename("ブック, *.xlsx")
        If ブックパス = "False" Then
            MsgBox "キャンセルされました"
        Else
            With Workbooks.Open(ブックパス).Worksheets("明細")
                .Activate
      ?@ .AutoFilter.Range.AutoFilter Field:=8, Criteria1:=Array("建仮"),  
            ?A  .AutoFilter.Range.AutoFilter Field:=25, Criteria1:=Array("JF", "JS"), Operator:=xlFilterValues
            End With
        End If
    End Sub
(初心者) 2020/06/19(金) 13:10

すみません、参照しているコードが違っていました;
解決いたしました。
(初心者) 2020/06/19(金) 13:33

コメント返信:

[ 一覧(最新更新順) ]


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