アプリ版:「スタンプのみでお礼する」機能のリリースについて

   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以上の抽出ができません。抽出条件のいい方法があったら教えてください。
マクロ操作で出来たらお願いします。  

A 回答 (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

この回答への補足

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

補足日時:2001/10/30 09:30
    • good
    • 0

>フィルタのオプション抽出でマクロ記録でやっているのですが


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

この回答への補足

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

補足日時:2001/10/31 08:58
    • good
    • 0

補足については想像した通りです。



『今はデータがないので、フィルターを通してもデータは抜けない。でも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"

これでやってみたのですがうまく抽出できません。
記述がおかしいと思いますので悪い所を教えてください。
以上

補足日時:2001/10/31 12:22
    • good
    • 0

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"
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!