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

このQ&Aに関連する最新のQ&A

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

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

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



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

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


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

この回答への補足

質問の仕方が悪くててすいません
マクロ記録で下記の処理をさせています。
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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q1/1 15:00 - 1/2 13:00 の時間を23.0と表現したい

すいません。
質問が1つございます。

1/1 15:00 - 1/2 13:00 の時間を23.0と表現したいがどうすればよいでしょうか。

添付画像の通りですが、1/1 12:00 - 1/1 14:00 は 下記の式で2.0と対応できます。
(14:00 - 12:00) * 24

1/1 15:00 - 1/2 13:00 の場合、 -2.0と表現されてしまいます。。。

1/1 15:00 - 1/2 13:00 の時間を23.0と表現する方法を教えていただければ幸いです。

Aベストアンサー

まずE列に「=(C1-A1+D1-B1)*24」の式を入れて、書式は「0.0」にします。

ちなみに「23.0」は「22.0」の間違いですよね

Q条件付き書式 時間 0:00:00の場合

セルの値を差し引いて、時間を出してるのですが
その時間が「0:00」の時、
そのセルを灰色にしたいのですが、
条件付き書式でうまくできません。

「=$A65536="0:00:00"」
「=$A65536="0:00"」
でも、何も変わりません。

時間は、セルの書式設定で「h:mm」にしています。

Aベストアンサー

どれでも。

=$A65536=0
=$A65536-"0:00"=0
=$A65536="0:00"+0
=$A65536="0:00"-0
=$A65536="0:00"*1
=$A65536="0:00"/1
=$A65536="0:00"^1
=$A65536=--"0:00"
=$A65536=n("0:00")
=$A65536=value("0:00")
=$A65536=timevalue("0:00")
=$A65536=sum("0:00")
=$A65536=max("0:00")
=$A65536=min("0:00")
=$A65536=average("0:00")
=$A65536=median("0:00")
=$A65536=imreal("0:00")
=text($A65536,"h:mm")="0:00"
=delta($A65536,"0:00")

最もよく使われているのは多分「*1」だと思いますが、「0:00」という時間に限って言えば、いちばん上の式も十分に分かりやすいです。

なお問題になっているのは、セルに記入されている(あるいは算出されている)値が、数値なのか、それとも文字列なのかという点です。セルに数値があって(あるいは空白で)、それを「0:00」という文字列と比較しようとしても、そのままでは当然、一致しません。Excel にデータ型を自動変換させるため、上のような数式が必要になっています。

したがって、セルの書式は何であっても構いません。書式は見かけを設定するだけのことなので、値とは直接の関係がありません。

どれでも。

=$A65536=0
=$A65536-"0:00"=0
=$A65536="0:00"+0
=$A65536="0:00"-0
=$A65536="0:00"*1
=$A65536="0:00"/1
=$A65536="0:00"^1
=$A65536=--"0:00"
=$A65536=n("0:00")
=$A65536=value("0:00")
=$A65536=timevalue("0:00")
=$A65536=sum("0:00")
=$A65536=max("0:00")
=$A65536=min("0:00")
=$A65536=average("0:00")
=$A65536=median("0:00")
=$A65536=imreal("0:00")
=text($A65536,"h:mm")="0:00"
=delta($A65536,"0:00")

最もよく使われているのは多分「*1」だと思いますが、「0:00」という時間に...続きを読む

Qあるセルに17:00と表示されてるのに、編集時に(セルをダブルクリックすると)5:00:00PMと表示されるには?

エクセル(97)のあるセルに「17:00」と
表示されてるのに、編集する時にセルを
ダブルクリックすると「5:00:00 PM」
と表示される事があるのですが、
これはどうやってるのでしょう?

表示形式を変えてしまうと、表示そのものが変わってしまいます。
何かの裏技でしょうか?

Aベストアンサー

OS側の時刻表示の設定です。
Windows2000の場合はコントロールパネルの地域のオプションの時刻タブで
時刻の形式「tt hh:mm:ss」
午前の記号「AM」
午後の記号「PM」
にすればそうなります。
ただタスクバーの時計の表示もこの形式になりますが...

QEXCEL: 日付のセルに1/2/3と入れると、2001/2/3と解釈されるが、2003/1/2と解釈させるには?

タイトルのとおりです。アメリカでは、1/2/3と書くと普通は2003年1月2日と解釈されます。
EXCELにて、 日付のセルに1/2/3と入れると、2001/2/3と解釈されますが、表示形式は2/3/01と指定できるにもかかわらず、入力形式は年/月/日と固定されていますよね。これは何とかならないでしょうか?
入力→解釈→表示が全て「月/日/年」と一貫していると、いちいち翻訳せずに済むのですが・・・。

Aベストアンサー

コントロールパネルの「地域と言語のオプション」で設定できます。

【手順(WinXPの場合)】
1.[スタートメニュー]-[設定]-[コントロールパネル]を選択
2.コントロールパネルの「地域と言語のオプション」を開く
3.「地域オプション」タブの「標準と形式」で「英語(米国)」を選択
4.[適用]ボタンを押す
5.[OK]ボタンで画面を閉じる
⇒Excelで「1/2/3」と入力すると「2003/1/2」と認識される

※Windows全体が手順3で選択した表示形式に変わります。

Q7桁の時刻(00:00:00.0)のコンマ以下を省略する方法を分かる方教えて下さい!

エクセル初心者につき、教えて下さい!

7桁の時刻のコンマ以下を省略したいのですが、その方法を分かる方、教えて下さい!
例 18:34:32.5→18:34:32

Aベストアンサー

No.6です。
まだ解決していませんでしたか。

四捨五入ではなく切り捨てにしたいのであれば、
=TEXT(A1-"00:00:00.5","hh:mm:ss")*1
のように、丸めたい下の桁から5引いてから四捨五入されるようにするとよい。

TEXT関数で、数値に対して書式を指定して表示させ、1を掛けることで数値(シリアル値)に戻しています。
数式を入力したセルの表示形式をユーザー書式で "h:mm:ss" または "hh:mm:ss" にしてください。


人気Q&Aランキング

おすすめ情報