ママのスキンケアのお悩みにおすすめアイテム

いつも大変お世話になっております。

表題の件について、時間の差異(例:フィールドA:5月平均時間-フィールドB:6月平均時間)を求めたいのですが、

(1)0:02:37-0:03:25
(2)0:04:22-0:03:25

上記いずれの場合も計算できる式をご教示いただけますでしょうか?

※(1)の場合はマイナスでの時間表示

どうか、よろしくお願いいたします!

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

A 回答 (2件)

差分を計算するだけであれば


[フィールドA]-[フィールドB]
でシリアル値として答えが出せます。

答えを時刻表示するのであれば、
IIf([フィールドA]>=[フィールドB],Format([フィールドA]-[フィールドB],"hh:nn:ss"),Format([フィールドA]-[フィールドB],"-hh:nn:ss"))
といった感じでしょうか。
    • good
    • 0
この回答へのお礼

dober-oさま
ご教示いただいた式で対応できそうです。
ありがとうございました!

お礼日時:2006/09/06 17:01

計算途中や合計で、24時間を越えなければ・・と言う条件ですが


時間差:Datediff("s",フィールドA - フィールドB)で秒数を出します。
計算はこの秒数のフィールドを使用します。
これは負の数でも扱えるようにしたいためです。

で、表示用には
Iif([時間差合計] > 0,cstr(cdate([時間差合計])),"-" & cstr(cdate([時間差合計])))
とでもするしか無さそうな気がします
    • good
    • 0
この回答へのお礼

ありがとうございます。
お教えいただいた式で試してみます!

お礼日時:2006/09/06 17:02

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Q[MS Access]クエリで変換 hhmm(数値型)⇒hh:mm(日付/時刻型)

テーブル上で”930”や”1030”というように数値型になっているデータを、
クエリ上では”9:30”や”10:30”の日付/時刻型へ変換したいと考えております。
この場合、どのようなSQL文で記述をすればよろしいでしょうか?
テーブルやフィールは下記のようになっております。

■テーブル名
tbl_サンプルテーブル

■フィールド名
ID(オートナンバー型)
時刻(日付/時刻型)

Aベストアンサー

元の数値が入っているフィールド名を「数値時刻」と仮定します。

[数値時刻] \ 100 & ":" & ([数値時刻] mod 100)

で、930 → 9:30 の文字列になります。
(905 → 9:5)

日付/時刻型への変換は CDate( ※1 ) を使います。(※1は上記の式)

このままの状態で表示させると 09:30:00 になるので、必要なら Format で形式を指定します。


Format(CDate([数値時刻] \ 100 & ":" & ([数値時刻] mod 100)),"hh:nn")

とか。


※ただ単に hh:nn 形式の文字列を作るのであれば、以下でも大丈夫かと

Right("0" & [数値時刻] \ 100, 2) & ":" & Right("0" & ([数値時刻] mod 100),2)

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Qアクセス クエリ 時間の合計

かなり初歩的な質問かと恐縮ですが、

フィールド名:時間
12:28
14:04
13:00
7:50

上記の様にアクセスのテーブルに時間が入力されている列をクエリの
集計で合計すると表示がおかしかったので、プロパティの書式に
時刻 (S)を指定しました。

そうすると時間の表示は正しい形となったのですが、
合計値がおかしな状態です。

エクセルでは[h]:mm:ssと書式を指定すれば縦列の時間合計値が
正しく表示されますが、アクセスではどういった指定をすれば
時間の合計をすることができるのでしょうか?

Aベストアンサー

日付時刻型で時間計算をしているのですね
Excelではこの方法が広く行われているので
[h]:mm:ssのような書式がサービスされていますがAccessにはありません

時刻は時間軸上の1点、時間は時刻と時刻の距離。数学的には全く異なるものです
時刻の足し算には意味がありません
本欄なら日付時刻型で時間計算をせずきちんと時間を表す数字で
計算する方がいいのですが

時刻を表す数値の正体が日を単位とする時間数値であるということを理解していれば
流用することが出来ないわけではありません
ただし、時刻書式には24時間以上はありませんから
結果を47:22のように表示するにはそのような文字列を自分で作成してやる必要があります

集計結果*24*60 \ 60 & ":" & 集計結果*24*60 MOD 60

QAccessの数値から時間に変換する時点で困っています。

Accessの数値から時間に変換する時点で困っています。
仕事の作業上にて、フォームの計算式にて5.25という数値が出ています。
それを5.25→05:15という時間の数字に変換したいのですが、方法がわかりません。
書式設定で可能なものなのか、それとも別のボックスに関数を使用した式をいれればできるのか……ぜひとも教えていただけるよう、よろしくお願い致します。

Aベストアンサー

私自身はAccess上で日付の演算をすることが殆ど
ないのですが・・・(汗)

> 5.25→05:15という時間の数字に変換したい

テキストボックスの書式などでやってみたところ、どうも
「5.25→5:25」とされてしまうです。

ですので、KIG_4さんご自身が考えたとおり、
> 別のボックスに関数を使用した式をいれ
て、対応するしかないと思います。
(同じ数値を、書式設定だけで「5:15」と「5:25」という
 異なる意味の数値に切り替えられるとは考えにくいので)

但し、関数による計算結果を表示する場合、
そのテキストボックスは編集不可(=表示専用)となって
しまいますので、ご注意下さい。

新規テキストボックスに設定する式としては、
 =Format(CDate([元のテキストボックス]/24), "hh:nn")
になります。

【式の説明】
日付/時刻関連の関数は「整数の1」=「1日」の扱いと
なります。
そのため、まず「5.25」を24で割って「1日(=24時間)の
何分の1に当たるのか」を算出します。
次に、CDate関数を使用して、Accessに、この演算結果
の小数を日付/時刻として認識させます。
最後に、Format関数で、「05:15」の書式で表示させて
います。
(「hh」で時間(Hour)を2桁表示、「nn」で分(miNute)も
 2桁表示、と指定)

※「分」が「m」ではないのは、通常、月(Month)の方に
 割り当てるためです。
 但し、今回の場合は「"hh:mm"」と指定しても、一応
 正しく「分」として表示されます。
 (「時」と「月」のみを組み合わせて扱うことは通常はない
  ので、その場合は「m」を分として扱うロジックが上記
  関数の内部に組み込まれているものと思います)

私自身はAccess上で日付の演算をすることが殆ど
ないのですが・・・(汗)

> 5.25→05:15という時間の数字に変換したい

テキストボックスの書式などでやってみたところ、どうも
「5.25→5:25」とされてしまうです。

ですので、KIG_4さんご自身が考えたとおり、
> 別のボックスに関数を使用した式をいれ
て、対応するしかないと思います。
(同じ数値を、書式設定だけで「5:15」と「5:25」という
 異なる意味の数値に切り替えられるとは考えにくいので)

但し、関数による計算結果を表示する場合、
そのテキストボ...続きを読む

Q時間の足し算

アクセスで時間の足し算をやりたいのですが
なかなかうまくいきません
08:03:00とテーブルにテキスト型でデータがあり、
これに1分足したいと思います
クエリでさせたいと思いますがどなたか教えていただけないでしょうか?
もしくはVBやSQLでもかまいません

Aベストアンサー

? Format(TimeValue("11:12:00") + TimeValue("23:56:00"), "hh:nn:ss")
11:08:00
? Format(CDate("11:12:00")+CDate("23:56:00"), "hh:nn:ss")
11:08:00

こういうように、足す=時刻を求めるという意味ならば Format関数も併せて・・・。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESSの時間帯の抽出について

between関数を使って、

クエリーで、テーブル上のとある任意の時間帯が記載された列について、

5:00から19:00を抽出したい、

5:00から25:00を抽出したい、

また上記がテキストだった場合も、
500から1900を抽出したい

といった条件は簡単にできますか?


アクセスマスターには優しい内容とおもいますが。

Aベストアンサー

> between関数を使って、

フィールドのデータ型が日付/時刻型の場合
抽出条件欄に、

> 5:00から19:00を抽出したい、
Between #5:00# And #19:00#

> 5:00から25:00を抽出したい、
Between #5:00# And #23:59# OR Between #0:00# And #1:00#

Access の日付/時刻型では、25:00 というような表現はできないので、上記のように分割することになります。

> また上記がテキストだった場合も、
> 500から1900を抽出したい

フィールドがテキスト型の場合、テキスト比較になり数値比較とは異なる抽出結果になるので、
フィールドに Val([テキスト型フィールド]) と式を設定して数値型に変換します。このの抽出条件に、

Between 500 And 1900

と設定します。

QAccessで24時間を超える時間の入力ができない。

時間を入力するときに、
25:00と入れると1:00と認識してしまいます。
24:00を超えると、自動的に切り替わるようですが、
これを「25:00」と表示させる方法はないでしょうか?

10進法で入力する方法も考えたのですが、
個々の値を10進法に変換して入力すると、
それらを合計したデータにわずかな差が生じてしまいます。

エクセルだと、25:00表示が可能なのは確認しましたが、
Accessでの方法がどうしても探せません。

環境→Access 2000
今までの設定方法→データ型:日付/時刻型,書式:時刻(S)

素人なので、詳しく教えて頂けると助かります。
よろしくおねがいします。

Aベストアンサー

> 最終的には「数値型で時間と分を分ける」方法を取りたいと思います。

テーブルには分単位でデータをもたせるようにすればいいと思います。

テキスト型(25:00) を分単位の数値(1500)としておけば、計算するのも
簡単ですね。
25:00 のように入力しているのであれば、Left 関数・InStr 関数で
時間を求めることができます。
分は、Mid 関数・InStr 関数で求めることができますね。
#必ず、5桁で入力するということであれば、もっと簡単ですが。


数値型(分単位)を、xx:xx の標記にするには、Mod 演算子・\ 演算子を
使えば簡単です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング