• ベストアンサー

Accessにて24時を越えた場合の表示

Accessのフォーム上で開始時間1というテキストボックスと終了時間1というテキストボックスがあります。 データ型は日付・時刻型です。 24時間表記で終了時間が26時の場合は2時と入力しています。 入力する際はそれで構わないのですが、 それをレポートとして印字する時に26時と印字されるようにはならないでしょうか? 開始時間1と終了時間1を比べて開始時間1のほうが大きければ終了時間1は24足した数字を表示したいのですが、うまく書けません。 よろしくお願いします

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

  • ベストアンサー
  • yu_tang
  • ベストアンサー率81% (26/32)
回答No.5

レポートにテキストボックスを配置して、コントロールソースに =([終了時間1]-([終了時間1]<[開始時間1]))*24 のような式を設定するとか。関数は不要です。 「26」のような数値が表示されるはずですので、書式プロパティに 「#\時」とでも設定しておけば、「26時」と表示させることが できるでしょう。 テキストボックスの名前は「終了時間1」や「開始時間1」と カブらない別の名前にしてください(でないと循環参照が発生 しますので)。 なお、TimeDiff() を使うなら、 =TimeDiff([終了時間1]-([終了時間1]<[開始時間1])) のような式を設定すれば「26:00:00」のようには表示できます。 ただし「26時」の表示形式にはなりませんので、今回の場合は 微妙にニーズとマッチしないかも。 TimeDiff() も使いどころにハマれば便利な関数だと思いますので、 機会があればご利用ください。

ajisaika
質問者

補足

ありがとうございます。 思ったより簡単な式で何とかなるのですね! 驚きです。 なのですが、もうひとつ教えて頂きたいことが… テキストA(終了時間) = ([終了時間1]-([終了時間1]<[開始時間1]))*24 ここには26時と表示されるのですが、 もうひとつ[開始時間2][終了時間2]という項目があって、 テキストB(開始時間) = ([開始時間2]-([開始時間2]<[テキストA(終了時間)])*24 という風にするとすべてに24が足されてしまいます。 つまり 終了時間1が22時の場合テキストA(終了時間)には22と表示され、 開始時間2が23の場合、そのまま23と表示させたいところ、 この式だと47となってしまうのです。 純粋にテーブルからデータを入れたテキストボックスを参照していないからかな?と思ったりするのですが、 何か解決策を教えていただければありがたいです。

その他の回答 (4)

noname#182251
noname#182251
回答No.4

試してみました Private Sub 時刻x_LostFocus() Me.テキスト2 = Me.時刻x - Me.時刻 If Me.テキスト2 < 0 Then Me.テキスト2 = Me.テキスト2 + 1 End If End Sub 関数など使わずに済むみたいです。

ajisaika
質問者

お礼

ありがとうございます。 できればプロパティのコントロールソースで何とかならないかな? とは思っていましたが、 こういった方法もあるのですね。 今後の参考にしたいと思います。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>=iff([開始時間1]>[終了時間1],[終了時間1]+24,[終了時間1]) 日付時刻型は内部は実数で、整数部分が日付(日単位)、小数部が 時刻を表しています。”[終了時間1]+24”これは24日後を意味 します。単位別の計算はDateAddを使います。 http://msdn.microsoft.com/ja-jp/library/cc410235.aspx ところで、「2時」が26時なのか、ただの2時なのかはどうやって 判定するんでしょう?日付の部分も必要なきがするんですが・・・

ajisaika
質問者

お礼

ありがとうございました。 2時か26時かは左側と右側を比べて、 22~2 ← 26時 1~2  ← 2時  と判断しようと思っています

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.2

どううまく書かれないのか?内容が書いていないので 今されている事が解りませんが If Me.開始時間1 > Me.終了時間1 Then MsgBox (DatePart("h", Me.終了時間1) + 24) End If これは、フォームに開始時間1、終了時間1を時刻の書式で 入力させ、ボタンクリック時 お望みの 26と言う数値を 表示させた場合です。 参考になれば。

ajisaika
質問者

お礼

ありがとうございます。 できればプロパティのコントロールソースで何とかならないかな? とは思っていましたが、 こういった方法もあるのですね。 今後の参考にしたいと思います。

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

こちらの Timediff 関数でご希望のことができると思います。 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaCalcTimeFunctions.html

ajisaika
質問者

お礼

ありがとうございます。 このページは私も見て、使えるかも!? と思ったのですが、実際どのように書けばよいのかわかりませんでした。 たとえば =iff([開始時間1]>[終了時間1],[終了時間1]+24,[終了時間1]) このような感じで考えたのですが、+24をの部分にTimeDiffを使うのでしょうか? お忙しいところ恐縮ですが、教えていただければ幸いです。

関連するQ&A