[[20161202103551]] 『オートフィルタ、Rangeエラーで動きません』(miyu) ページの最後に飛ぶ

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

 

『オートフィルタ、Rangeエラーで動きません』(miyu)

初めて投稿します。
オートフィルタでエラーが発生してうまくいきません。
ご指摘をお願いできませんでしょうか? m(_ _)m

※ 行数や日付は実務では毎回かわりますが、ここでは直接数値を代入してテストしています。

エラー名:実行時エラー'1004' RangeクラスのAutoFilterメソッドが失敗しました。

*************************************************

Option Explicit
Sub オートフィルタテスト()

    Dim ws As Worksheet
    Dim kaishi As Date            '開始日
    Dim owari As Date             '終了日

    Dim minrow As Variant         '開始行
    Dim maxrow As Variant         '終了行

    Set ws = Worksheets("発注列抜粋")
    kaishi = "2016/11/1"
    owari = "2016/11/7"
    minrow = 5
    maxrow = 10449

'↓動かない

   ws.Range(Cells(minrow, 3), Cells(maxrow, 3)).AutoFilter Field:=3, Criteria1:=">=" & kaishi, Operator:=xlAnd, Criteria2:="<=" & owari

'↓動く
' ws.Range(Cells(minrow, 3), Cells(maxrow, 3)).Select
' ws.Range("$A$5:$N$10449").AutoFilter Field:=3, Criteria1:=">=" & kaishi, Operator:=xlAnd, Criteria2:="<=" & owari

End Sub

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


ぱっと見ですが、Cellsの前にシート(ws)を指定していないせいではないでしょうか?
(???) 2016/12/02(金) 11:14

 かぶりましたがメモしましたので。

 ぱっと見ただけですが、動く動かないというのは、コードというより実行した状況の差異ではないですか?
 コード自体は 動くコードも動かないコードも どちらも だめ ですから。
 (このコードが標準モジュールに書いてあるという前提でのコメントですが)

 うまくいったときは 発注列抜粋 シートをアクティブにして実行。
 うまくいかなかったときは、別のシートをアクティブにして実行したのではないですか?

 もし、別のシートをアクティブにして実行すれば

 ws.Range(Cells(minrow, 3), Cells(maxrow, 3)).Select 

 ここでエラーになるはずですから。

   ws.Range(Cells(minrow, 3), Cells(maxrow, 3)).AutoFilter Field:=3, Criteria1:=">=" & kaishi, Operator:=xlAnd, Criteria2:="<=" & owari

 これを

   ws.Range(ws.Cells(minrow, 3), ws.Cells(maxrow, 3)).AutoFilter Field:=3, Criteria1:=">=" & kaishi, Operator:=xlAnd, Criteria2:="<=" & owari

 にすると、どうなりますか?

(β) 2016/12/02(金) 11:17


>'↓動かない
> ws.Range(Cells(minrow, 3), Cells(maxrow, 3)).AutoFilter Field:=3, Criteria1:=">=" & kaishi, Operator:=xlAnd, Criteria2:="<=" & owari

んと、、、
Range(Cells(minrow, 3), Cells(maxrow, 3))
↑で操作するセル範囲を1列と指定しているのに、
フィルターをかける場所を
Field:=3
範囲の3列目としているので、
3列目は無いよというエラーですね。
表の何列目にフィルターを掛けたいか解らないけど、
Range(ws.Cells(minrow, 3), ws.Cells(maxrow, 3)).AutoFilter Field:=1, Criteria1:=">=" & kaishi, Operator:=xlAnd, Criteria2:="<=" & owari

こうとか?
あるいは、
Range(ws.Cells(minrow, "A"), ws.Cells(maxrow, "N")).AutoFilter Field:=3, Criteria1:=">=" & kaishi, Operator:=xlAnd, Criteria2:="<=" & owari

かな?
最後の結果は同じかも知れないけど、
フィルターのかかり具合(?)が違うので動作を確認してください。
(まっつわん) 2016/12/02(金) 12:01


早速の回答ありがとうございました。試してみましたが、同じ1004エラーでした。

すみません、VBA初心者で、ネットの情報をかき集めて初めてコードを書いてみましたので、
根本的に書き方がおかしいところもあったみたいです。

環境は、
・5行目がタイトル行で、A6〜N10449にデータが入っています。
・C,D,E,K列が日付データ(Cdateで変換済)で、これらの列をオートフィルタしたいと思っています。
・コードは「標準モジュール」に書いてあります。
・ブックの中は「発注列抜粋」シートのみで他のシートは存在しません。
・動く、動かないとしているところに関しては、自身で試したことを参考としてかいていました。すべて同じシートで試しています。実行の際は、必要な行のみコメントを外し、他はコメントをつける…を毎回手動でやってました。
(miyu) 2016/12/02(金) 13:07


連投すみません。
AutoFilter Field:=3 の部分を AutoFilter Field:=1 に書き換えるのを忘れており、さきほど、AutoFilter Field:=1 に書き換えたら動きました!

C列が対象だったのでField:=3かと思っており少し混乱しています…。
不勉強ですみません。

(miyu) 2016/12/02(金) 13:18


 あぁ、よくコードを見ると C列の1列だけを領域としてフィルターをかけているんですね。

 Field:= は、そのテーブル領域の中の列番号になります。
 C列から始まる領域なら、C列は 1、仮に D,E,F,・・・も領域に含まれていれば
 Field:= 3 は E列になります。

 で、今回の場合領域は 1列しかないので、その中の 3列目 って、そんな列はありませんよ!!
 とエクセルから叱られます。

(β) 2016/12/02(金) 13:45


ネットのQAを使うのが初めて不安だったのですが、おかげすっきり解決しました。
ありがとうございました!またよろしくお願いします。
(miyu) 2016/12/02(金) 16:55

コメント返信:

[ 一覧(最新更新順) ]


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