- ベストアンサー
エクセル2000マクロ操作の質問:条件抽出方法について
- エクセル2000でデータベースの条件抽出をする方法について教えてください。
- 現在はマクロ記録でフィルタのオプション抽出を使用していますが、来年の西暦が変わると条件抽出ができなくなる問題があります。
- マクロ操作で条件抽出をする最適な方法があれば、教えていただけないでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問の意味を、『月、日、時刻入力のみで期間指定する』と解釈して下記コードを書いてみました。 年なしで月日を入力したら両方の月日を比べて逆転していたら開始年を『-1年』しています。年をつけて入力すればそれを使用します。自動的に付加される年は現在の年のため、質問の年を全て『-1』してテストすれば確かめられると思います。閏年の1年前の日付とか気になりますが、その時は年を付けて入力すれば大丈夫でしょう。 AutoFilter の Field:=1 の 『1』はQ列が実際のフィルターで左から何番目かをセットします。 意味を捉えていればいいんですが・・・。ご参考に。 Sub Macro1() Dim startYMD As Date '開始年月日 時刻 Dim endYMD As Date '終了年月日 時刻 On Error GoTo ErrorHandler startYMD = InputBox("開始年月日 時刻") endYMD = InputBox("終了年月日 時刻") If startYMD > endYMD Then startYMD = DateSerial(Year(endYMD) - 1, Month(startYMD), Day(startYMD)) End If Selection.AutoFilter Field:=1, Criteria1:=">=" & startYMD, Operator:=xlAnd, Criteria2:="<=" & endYMD Exit Sub ErrorHandler: End Sub
その他の回答 (3)
- nishi6
- ベストアンサー率67% (869/1280)
Sheets("data")にオートフィルタをかけるとして、Q列は17番目なので、西暦年はデータが無い右側に入力すべきでしょう。AA1、AB1は使っていないとしています。使っていればもっと右にして下さい。 AutoFilterの行は修正してみました。文字の連結の仕方とseireki_A(元はseirekiA)を修正しています。 Dim seireki As String, seireki_A As String seireki = Range("AA1").Value seireki_A = Range("AB1").Value Sheets("data").Select Selection.AutoFilter Selection.AutoFilter Field:=17, Criteria1:=">=" & seireki & "/12/26 8:00", Operator:= _ xlAnd, Criteria2:="<=" & seireki_A & "/1/26 7:59"
- nishi6
- ベストアンサー率67% (869/1280)
補足については想像した通りです。 『今はデータがないので、フィルターを通してもデータは抜けない。でも2002年になったら年がないからマズイ』ということだと思いますが、今のフィルターはデータがないので抜けないのではなく、このフィルターに合致するデータはいつも存在しないと思います。結局、フィルターは機能していないと思われます。違っていたら補足してもらえばと思います。 この処理で重要なのは『年』を付加することで、下はパソコンの日付を使っています。月・日しかないデータを処理する場合、12月と1月の年をどうするか問題になることがあります。 下は2001年12月に処理を行えば、2000/12/26 8:00~2001/1/26 7:59 が対象になります。 2002年 1月に処理を行えば、2001/12/26 8:00~2002/1/26 7:59 が対象になります。 処理のタイミングが重要になります。実際の仕事では今は12月だから開始年は何年、1月なら何年と明確に決まることもあります。 この処理の内容で必要なら下記を修正して下さい。 Selection.AutoFilter Field:=17, Criteria1:=">=" & (Year(Now()) - 1) & "/12/26 8:00", _ Operator:=xlAnd, Criteria2:="<=" & Year(Now()) & "/1/26 7:59"
補足
処理のタイミングが決まっていません。その都度になります。 そこであるセルの場所(b12)に西暦2001と(b13)に西暦2002入っています。 変数を使ったマクロを書いてみました。 Dim seireki As string,seireki_A as string Sheets("data").Select Range("b12").Select seireki = ActiveCell.Value Sheets("data").Select Range("b13").Select seireki_A = ActiveCell.Value Selection.AutoFilter Selection.AutoFilter Field:=17, Criteria1:=">=seireki 12/26 8:00", Operator:= _ xlAnd, Criteria2:="<=seirekiA 1/26 7:59" これでやってみたのですがうまく抽出できません。 記述がおかしいと思いますので悪い所を教えてください。 以上
- nishi6
- ベストアンサー率67% (869/1280)
>フィルタのオプション抽出でマクロ記録でやっているのですが この意味が分からず、補足の >自動抽出は無理なのでしょうか で益々わからなくなりました。 今、どのような処理をされているのか、『自動抽出』の意味はどのようなことかを補足してもらえないでしょか。 例えば、日付を今日の日付で自動計算するとか、セルに入力したものを持ってくるとか、処理予定の一覧表があるとか、そういうことです。 望む処理が詳しく分かれば対応できると思いますが・・・
補足
質問の仕方が悪くててすいません マクロ記録で下記の処理をさせています。 Selection.AutoFilter Selection.AutoFilter Field:=17, Criteria1:=">=12/26 8:00", Operator:= _ xlAnd, Criteria2:="<=1/26 7:59" このやり方だと西暦を入れていないので来年2002年になったときに2001年のデータが 抽出されません。西暦日付時刻まで自動抽出でデータを抽出する方法ということです。 よろしくお願いします。
補足
回答ありがとうございました。 もしよければ、Inputboxを使わないで自動抽出は無理なのでしょうか。 よろしくお願いします。