エクセル2000マクロ操作の質問:条件抽出方法について

このQ&Aのポイント
  • エクセル2000でデータベースの条件抽出をする方法について教えてください。
  • 現在はマクロ記録でフィルタのオプション抽出を使用していますが、来年の西暦が変わると条件抽出ができなくなる問題があります。
  • マクロ操作で条件抽出をする最適な方法があれば、教えていただけないでしょうか?
回答を見る
  • ベストアンサー

エクセル2000マクロ操作

   Q列   終了時間  2001/11/25 3:00  2001/12/26 11:30  2002/1/24 11:30  2002/2/24 11:30   データベースの中から条件抽出をしたい。 条件は 2001 12/26 8:00以上で 2002 1/26 7:59以下を抽出したい。 今現在は、フィルタのオプション抽出でマクロ記録でやっているのですが。 西暦は条件に入れてなくて日付時間でやっていますので、来年の西暦が来たときに 2001 12/26 8:00以上の抽出ができません。抽出条件のいい方法があったら教えてください。 マクロ操作で出来たらお願いします。  

noname#72697
noname#72697

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

質問の意味を、『月、日、時刻入力のみで期間指定する』と解釈して下記コードを書いてみました。 年なしで月日を入力したら両方の月日を比べて逆転していたら開始年を『-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

noname#72697
質問者

補足

回答ありがとうございました。 もしよければ、Inputboxを使わないで自動抽出は無理なのでしょうか。 よろしくお願いします。

その他の回答 (3)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

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)
回答No.3

補足については想像した通りです。 『今はデータがないので、フィルターを通してもデータは抜けない。でも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"

noname#72697
質問者

補足

処理のタイミングが決まっていません。その都度になります。 そこであるセルの場所(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)
回答No.2

>フィルタのオプション抽出でマクロ記録でやっているのですが この意味が分からず、補足の >自動抽出は無理なのでしょうか で益々わからなくなりました。 今、どのような処理をされているのか、『自動抽出』の意味はどのようなことかを補足してもらえないでしょか。 例えば、日付を今日の日付で自動計算するとか、セルに入力したものを持ってくるとか、処理予定の一覧表があるとか、そういうことです。 望む処理が詳しく分かれば対応できると思いますが・・・

noname#72697
質問者

補足

質問の仕方が悪くててすいません マクロ記録で下記の処理をさせています。 Selection.AutoFilter Selection.AutoFilter Field:=17, Criteria1:=">=12/26 8:00", Operator:= _ xlAnd, Criteria2:="<=1/26 7:59" このやり方だと西暦を入れていないので来年2002年になったときに2001年のデータが 抽出されません。西暦日付時刻まで自動抽出でデータを抽出する方法ということです。 よろしくお願いします。

関連するQ&A

  •  エクセルマクロでこれを簡単に出来ますか?

     部材関係の仕事に携わっている者ですが、日々変る納品リストの整理が長引き、もっと簡単にしたいと思いますが、次のことをエクセルマクロで瞬時にできるのでしょうか?私はエクセル初心者な者で詳しいことが分かりません。  1.エクセルワークシートが15部の構成のブック  2.その内、自分が必要とするのが5部のシート  3.その各シートには2005.6.○○と日付が付与され   ている  4.その5部のワークシートに記載されている部材うち、自分に関係する物だけをフィルタオプションを使って抽出、抜き出している。  5.フィルタオプションの抽出条件は別ファイルを開き、コピー、貼付けして検索している。  6.各シート検索後、抽出データーを1枚のシートにまとめるために統合機能を使い、1つのリストにしている。  7.日付により、項目が増減、変動するので多くなると1ページに印刷すると、文字が小さくなるので、目一杯縦横の余白を最小にして印刷している。  以上のような流れなのですが、元になるワークシートのシート名に日付が付与されているせいか、マクロを記録してもエラーが出ます。やはり単純なマクロの記録では1~7の操作実行は無理なのでしょうか?  手順はいつもと同じなのですが、シート日付名をそのまま記録してしまうからでしょうか?  現状1~5までの操作を各シート毎に繰り返しているので非常に時間が係ります。VBAじゃないと無理なのでしょうか?個人用マクロに保存しています。アドバイスお願いします。

  • Excelで同じ商品名で、かつ日付が古いものを抽出する方法

    ご存知の方、いらっしゃいましたらお願いします。 Excelは2003を使用しています。 複数の条件での抽出で名前が決まっているものは「フィルタオプションの設定」で行っていますが、日付が古いもの、新しいものの抽出方法がわかりません。 「同じ商品名」かつ「日付が古いもの」を抽出したいのですが、それが出来そうな関数、マクロはありますでしょうか。 当方マクロ知識は「マクロの記録」程度です。 A列  B列    C列 商品A 2007/12/01 10:00 商品B 2008/04/01 10:00 商品A 2008/05/01 10:00 現在は目視、手動で★印を別列につけ、それを抽出し削除しています。 削除フラグとして★印等をつけるようなものでも、わかれば嬉しいです。

  • エクセルのマクロ・・・。

    エクセルのマクロのところを勉強しています。そもそもマクロってどんな時使ったら効果的なのでしょう?私のやってるテキストの問題は、【新しいマクロの記録】をクリックし、フィルタオプションを設定するマクロ、フィルタオプションを解除するマクロ。社員名をク順に並べたりするマクロ。それを元に戻すマクロを作りました。マクロというのはエクセルがあまりできない人にデータを見せるときに簡単にデータの抽出、解除ができるようにする設定だと思えばいいのでしょうか?よきアドバイスお願いします。

  • Excel2000マクロ

    お世話になっております。 マクロのことで教えてください(マクロ初心者です(^_^;)) A列・・日付 B列・・時刻 C列・・数値データ “時刻”が2秒おきのデータなので1分おきのデータを抽出したいので、D列にSECOND関数を使って秒だけを抜き出し、 オートフィルタで“0”だけを抽出し、これで1分おきのデータを抽出し、 B列がX軸でC列がY軸のグラフを作ります。 これをマクロで記録して自動的にやりたかったのです。 ですが、 「D列にSECOND関数を使って秒だけを抜き出し、 オートフィルタで“0”だけを抽出し、これで1分おきのデータを抽出し、・・」 のところは、うまくマクロで自動化できるのですが、 別シートに出来たグラフを見ると、一番最初に記録して作ったグラフがそのまんまできてしまいます。 次のデータでグラフをつくりたかったのですが。。 これはどうしてでしょう? グラフまではうまくできないのでしょうか?

  • フィルタオプションをマクロで

    1 テキストを読み込んで並べ替えなどして   表(1行目はタイトル)を作り、   フィルタをかける(マクロ) 2 フィルタオプションで必要なデータを抽出   その際に日付を手入力する   (例  A列(毎回決まった列)     2005/4/1以上 降順) 3 その後の作業(マクロ) このように1のマクロを起動して その後 2を手作業して 更に3をマクロを 起動すると言う方法をとっていますが 2の内容もマクロで作って 「日付」だけを 入力するように求められて それを入力するだけで その後の作業も自動で行うことは出来るでしょうか?

  • Excel フィルタオプションをマクロに記録する

    いつもお世話になっています。 タイトルどおりなのですが、フィルタオプションをマクロの自動記録で記録し 実行したいと思います。 ただ、条件を入力する行が1行だと問題ないのですが、2行になった場合、 2行とも何らかの条件が入っていないと抽出をしてくれません。 そもそも、そういう仕様なのでしょうか。 解決方法がありましたら教えてください。 よろしくお願いします。

  • エクセル2000マクロについて

    下記のデータベースを作っています。 フィルターオプションで条件式を作ってリスト抽出するマクロを教えてください。     B列~O列  シート名(A)                        3行目 No. 巡視日 管理部署 件名 場所     1 4月1日 製造一課 食器棚の上 事務所食堂      2 5月8日 製造一課 連絡系統図 作業場     3 6月8日 製造一課 帳票類の整理 事務所隣書類棚     4 7月8日 製造一課 爆発テスト用備品A倉庫右隣 条件式 巡視日   別シート名(B)で作っています。 >=200204 <=200206 上記の条件式で抽出するマクロを教えてください。 データの件数は決まっていません。その都度変わる。シート名(A) 

  • エクセル2003 マクロ

    オートフィルターを使って、「○○を含む」と抽出する事をマクロで行いたいです。○○に入る抽出の条件は変動します。どこかに入力値を持たせておく必要があると思うのですが、マクロについては初心者でほとんどわかりません。どなたか教えてください。よろしくお願いします。

  • excel 2003 オートフィルタ!

    excel 2003で、オートフィルタがうまくいきません。 A列の2行目から、1~5までの数字がランダムに並んでいるとします。 A1セルをオートフィルタし、 条件を、オプション>3を含む で指定すると、3がフィルタされてほしいのですが 1つも抽出されません。 3で始まるもだめでした・・ フィルタで抽出するマクロをくんでいて 列は、20列以上あり、 列によって、文字や数値があります。 フォームで列を選び、検索文字を入力して Criteria1:="=*" & 検索文字 & "*", Operator:=xlAnd と言う感じでフィルタしています。 文字はできますが、数値ができないのは、なぜでしょうか・・・

  • エクセル2000フィルター抽出条件式について

    フィルター抽出条件がうまく抽出出来ません教えてください。 抽出条件式 別シートで作っている。(Bシート)  巡視日      巡視日 >=2002/05 <=2002/07 条件式の意味 2002年5月以上で2002年7月以下のデータを抽出する。 2002年5月以上のデータは抽出できるが、2002年7月が抽出されない 2002年5月と2002年6月しか出てこない。 データベース(Aシート) C列 巡視日 4月8日 5月11日 5月11日 6月5日 7月4日 7月4日 エクセル操作(データ→フィルター→フィルターオプション設定)で 検索条件範囲を 巡視日      巡視日 >=2002/05 <=2002/07 指定してやるとデータベース(Aシート)のC列の抽出が 2002年5月以上のデータは抽出できるが、2002年7月が抽出されない 2002年5月と2002年6月しか出てこない。 何故でしょうかよろしくお願いします。

専門家に質問してみよう