[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロでオートフィルタを使う』(KI)
	A	B	C
1	日付	2005/2/28	
2	2004/12/22		
3	2005/1/31		
4	2005/2/28		
5	2005/2/20		
6	2005/2/24		
7	2005/3/2		
8	2005/2/10		
9			
10			
マクロでのオートフィルタで行き詰っています。
A1:A8を選択し2005/2/28より小さいものを抽出するのを
マクロの記録でやると、次のように記録されました。
    Range("A1:A8").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, Criteria1:="<=2005/2/28", Operator:=xlAnd
そこで質問ののですが、2005/2/28というのを例えばB1セルに
2005/2/28と入力しておきB1よりも小さいものを抽出する
と言う風なマクロにするにはどのようなマクロ文を
記述すればよいのでしょうか?
 Dim MyStr As String
 MyStr = Format(Range("B1").Value , "yyyy/mm/dd")
 Selection.AutoFilter Field:=1, Criteria1:="<=" & MyStr
 
 Operator:=xlAndはCriteria2がなければ不用。
(みやほりん)
以上、以下の設定でフィルタする操作を、マクロの記録をしてみては如何でしょうか? それを同じようにFormat関数を利用すればできると思います。 (INA)
>上の表で2004/12/22〜2005/2/24(任意)を抽出することはできるのでしょうか? マクロの記録で作成してみました。対象範囲を選択してから実行します。 (LOOKUP)
A B C 1 日付 2004/12/22 '2/24 2 2004/12/22 3 2005/1/31 5 2005/2/20 6 2005/2/24 8 2005/2/10
 Sub Macro3()
     Selection.AutoFilter Field:=1, Criteria1:=">=" & Range("B1").Value, _
     Operator:=xlAnd, Criteria2:="<=" & Range("C1").Value
 End Sub
皆様どうも有難うございました。無事解決出来ました。 (KI)
やってみたのですが・・・
該当の日付が抽出されず、
ぜんぶ非表示になってしまいます。
どこが悪いのか、見当がつかないので・・・
注意する点などありますでしょうか?
(kumi)
どのように実行されたのでしょう? >どこが悪いのか、見当がつかないので・・・ これだけでは、さすがに想像するのも困難でしょう? データをここに書いて教えていただけませんか? (LOOKUP)
A B 1 入金日 6月20日 2 3 日付 金額 4 6月20日 15,000 5 6月20日 25,000 6 6月21日 10,000 7 6月22日 13,000
Sub Macro1()
     Selection.AutoFilter Field:=1, Criteria1:="=" & Range("B1").Value
End Sub
こんな感じです。
お願いします。(kumi)
 オートフィルタで日付を変数として与える場合は
OS、Excelのバージョンによって少し挙動が異なる場合がある。
Format関数を利用して対象列と同じ表示形式の文字列とする、
システム日付とフィルタをかける列の日付の形式を同じものにしておく、
この2点に留意しておくとどのバージョンでも比較的安定した動作になる。
 
例えば、表示形式をyyyy/mm/ddとし、システム日付がyyyy/m/d形式である場合、
Criteria1:= Range("B1").Valueでは検索値として "1998/8/2" となり、
1998/08/02が検索されない、という事例を経験している。
 
今回の場合は検索値をCriteria1:="=" & Format(Range("B1").Value , "yyyy/mm/dd")
対象列の表示形式yyyy/mm/ddとし、各形式をそろえる。(みやほりん)
ありがとうございました。 みやほりんさんが指摘してくれたようにやってみたら、 うまくいきました。 ただ・・・ やっぱり、日付欄に'平成17年6月20日'のようには入力できないのですね? (kumi)
マクロのお話ですか?
殆ど無知ですが、この場合には、下のようにして、こちらでは、A3:A7を選択した後に 実行しますと、それなりの結果が得られるのですが。。 (LOOKUP)
 Sub Macro1()
      Selection.AutoFilter Field:=1, Criteria1:=">=" & Range("B1").Value, _
      Operator:=xlAnd, Criteria2:="<=" & Range("B1").Value
 End Sub
OSによってオートフィルタにおける日付の認識の仕方に差があるようで、 下記で議論したことがある。 [[20040105195022]]『VBA:Autofilterメソッドの引数Criteria』(KAMIYA) 特にWin98、Excel2000の組み合わせではOSのシステム日付をyyyy/mm/ddにしたうえで Criteria1:="=" & Format(Range("B1").Value , "yyyy/mm/dd") 対象列の表示形式もyyyy/mm/ddとしないとフィルタリング出来ないという検証結果に終わった。 Selection.AutoFilter Field:=1, Criteria1:="=" & Format(Range("B1").Value, "ggge年m月d日") ではマクロでは抽出できないが、抽出できなかったフィールドで(オプション)を確認すると ちゃんと"ggge年m月d日"形式の文字列がcriteria1に代入された状態になっている。 そのままOKすると所期の結果が得られるのが悲しい。 Win2000、XPの場合は表示形式による影響は少なかったように記憶している。 (みやほりん)
オートフィルタは、フィルタオプションの設定ほど厳密に利用したことがありませんので、 想像を交えて申し上げます。記載は、エクセル97SR2の場合です。
オートフィルタの検索条件は、通常では、選択項目のドロップダウンで表示されたものから 選択しますので、表示も含め被検索データそのものを指定することになりますが、
オプションの、以上、以下の指定では、被検索データとは異なるデータを指定することが、 前提になっていることを想定し、論理が作成されているような気がします。(想像です。)
日付 6月20日 2005/6/20 6月21日 6月22日
上のデータで、オートフィルタを実行しますと、ドロップダウンで表示されるものは、 このように6月20日または、2005/6/20が指定できます。 日付 (すべて) (トップテン) (オプション) 6月20日 2005/6/20 6月21日 6月22日
しかし、オプションをクリックして、オートフィルタオプションの画面で、 抽出条件の指定: -日付-- 平成17年6月20日 以上 平成17年6月20日 以下 と指定しますと、
6月20日 2005/6/20 2件とも抽出できます。
抽出条件の指定:の画面を再確認しますと、 平成17年6月20日は、2005/6/20に置き換えられています。
>やっぱり、日付欄に'平成17年6月20日'のようには入力できないのですね? には、 エクセル97SR2の場合では、そんなことは、ないでしょう?できますね。 というお返事になるように思います。 (LOOKUP)
 追試報告。Excel2000でもLOOKUPさんの方法を確認した。
    Criteria1:=">=" & Range("B1").Value, _
    Operator:=xlAnd, _
    Criteria2:="<=" & Range("B1").Value
同じセルの値を以上、以下とすることで表示形式に関わらず
(たとえ表示形式が数値であっても)抽出できる結果を得た。
 
日付の抽出の場合、以下のことが推論できそうである。
「以上、以下による抽出では日付は数値として評価される」
「Criteria1だけを使い、"="による限定抽出とした場合には、
システム日付と同じ表示形式(文字列)に変換した上でのマッチングを行っている」
 
(みやほりん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
 Modified by kazu.