[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルタ、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 >
かぶりましたがメモしましたので。
ぱっと見ただけですが、動く動かないというのは、コードというより実行した状況の差異ではないですか? コード自体は 動くコードも動かないコードも どちらも だめ ですから。 (このコードが標準モジュールに書いてあるという前提でのコメントですが)
うまくいったときは 発注列抜粋 シートをアクティブにして実行。 うまくいかなかったときは、別のシートをアクティブにして実行したのではないですか?
もし、別のシートをアクティブにして実行すれば
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
んと、、、
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
すみません、VBA初心者で、ネットの情報をかき集めて初めてコードを書いてみましたので、
根本的に書き方がおかしいところもあったみたいです。
環境は、
・5行目がタイトル行で、A6〜N10449にデータが入っています。
・C,D,E,K列が日付データ(Cdateで変換済)で、これらの列をオートフィルタしたいと思っています。
・コードは「標準モジュール」に書いてあります。
・ブックの中は「発注列抜粋」シートのみで他のシートは存在しません。
・動く、動かないとしているところに関しては、自身で試したことを参考としてかいていました。すべて同じシートで試しています。実行の際は、必要な行のみコメントを外し、他はコメントをつける…を毎回手動でやってました。
(miyu) 2016/12/02(金) 13:07
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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.