• ベストアンサー

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

  • 何度もすいません アクセスにて

    アクセスにて テーブル 氏名 月 開始時間 終了時間 1日 2日 3日・・・31日 とデータを持っております。 氏名はそのまま 月は1~12の数字 開始時間 終了時間は23:00のような24時間表記  1日~31日までのデータは 該当するところに-1の表記があり非該当はnull値となっております フォームにて1日 と入力すると 1日に-1の入っているデータの 氏名 開始時間 終了時間 をすべて出したい場合 どのようにすればいいでしょうか? フォームはカレンダーで1~31のチェックボックスを作成する予定です フォームで入力した値で抽出をし レポートに出したいのですが いまいちやり方がわかりません ご示唆お願いいたします。

  • Accessで24:00を入力したいが?

    こんにちは! Accessで24:00の値を入力若しくは認識させる方法は? テキストボックスを開始時刻と終了時刻の2個を配置し 開始時刻を23:00 終了時刻を24:00 この範囲のレコードを求める時 又は13:30から24:00の"n"の値が欲しいときはどのような 処理になるのでしょうか? テキストの表示は「時刻 (S)」定型入力は09\:99;0;_ 24:00を入力できない 00:00だと返る値が違う よろしくお願いします。

  • フォームをレポートのレコードソースにできる?

    フォーム上に「yyyy/mm/dd」と日付を入力するテキストボックスを設けて、レポート上にそのテキストボックスの日付をソースにして表示させたいのですが、可能でしょうか? より詳しいことを申し上げると、クエリ内で「between」を使っています。 開始日と終了日のふたつの日付を表示させたいのです。 可能でしょうか? ちなみにAccessのバージョンは2000です。

  • カレンダについて(Access2000)

    WindowsXP SP2, Access2000, Visual Basic6.5で開発しております。 Accessのフォームに複数のテキストボックスがあり、テキストボックスをクリックしたらフォームにMSCAL.Calendar.7を張り付けたをカレンダーサブウィンドウを表示して日付入力できるようにしたいです。 そこで、下記の点がうまくできなくて困っているのでご教授ください。 ・カレンダーの表示時、どのテキストボックスから呼ばれたか判別できない。(カレンダーにうまくテキストボックスオブジェクトを渡せない) ・カレンダーの表示時、呼び出し元のテキストボックスに日付が入力されていた場合はその日付をデフォルト表示したい。

  • 該当レコードがない場合その旨表示させたい

    Access2000を使用しています。 フォーム上のテキストボックスに日付を入力してボタンを押下すると、入力された日付に該当するレコードを、ソースとなるテーブルから選択クエリで抽出し、それをもとにレポート出力するようになっています。 入力された日付のレコードがソースとなるテーブルにない場合、「該当の日付のレコードはありません」とメッセージを出すようにしたいのですが、VBAでどのようにすればいいでしょうか? IsNull関数を用いて、If~Then~Elseを使おうと考えたのですが、この時テキストボックスに入力された日付で、ソーステーブルのレコードを絞り込む方法がわかりません。

  • Access レポート作成時のフィルタのかけ方

    Microsoft Accessでテーブルからレポートを作製する際のフィルターのかけ方がわかりません。 VBAにて DoCmd.OpenReport "領収記録", acPreview, , 領収日付 >= Forms!f_入力!開始日.Value, acWindowNormal を使用しており、「領収日付」は「領収記録」のフィールドの一つです。 フォーム「f_入力」のテキストボックス「開始日」で指定した日付以降のレコードのみを表示させたいのですが、 フィルタがかからず全レコードが表示されてしまいます。 「領収日付」、「開始日」共にデータ型は日付型です。 よろしくお願いします。

  • Access2007以降のカレンダー表示

    Access2007以降の機能で、日付/時刻型のデータを入力するテキストボックスにカーソルを合わせると自動的にカレンダーが表示されるようになっていると思います。 これを非表示にすることはできるのでしょうか? テーブルの構造を変えずにやりたいので、テキストボックスのリンク先のテーブルのデータ型を変えて日付/時刻型以外にするという方法以外であれば教えていただきたいです。

  • Access2007でプルダウンメニューを使う時のVBAの組み方、プロ

    Access2007でプルダウンメニューを使う時のVBAの組み方、プロパティの設定方法が わかりません。わかる方いらっしゃいましたら教えてください。 以下のようなフォームを作成しています。 ■受付内容:プルダウンメニューです。とあるテーブルとつなげています。データは、入会・再入会・退会が選択できます。 ■受付日:テキストボックスです。日付を入力します。 ■入会開始日:テキストボックスです。日付を入力します。 ■退会日:テキストボックスです。日付を入力します。 上記のような場合、たとえば、受付内容で、「入会」を選択したときに、 「退会日」のテキストボックスをアクティブにしない、または非表示のどちらでもよいのですが、 とにかく入力させないようにしたいです。 できれば、プルダウンメニューで選択する度に、テキストボックスを表示・非表示になるようにしたいの ですが、設定がうまいことできません。 どのようにしたらよいか、おわかりになる方がいましたら、教えてください。 よろしくお願いします。

  • アクセスのフォームで期間検索するには?

    アクセスの検索フォームで、レコードを別フォームで表示して、表示したフォームでフィールド毎に検索しています。 日付の部分だけ、検索方法が分からず、なかなか出来ない状態です。 このフォームに、開始と終了のテキストボックスを設置しています。 ボタンを押して、開始と終了の期間のデータを表示出来ればと思います。 宜しくお願いします。

  • アクセスVBAでの時刻の計算

    開始時刻と終了時刻をテーブルに保存するために、フォームの入力欄に、操作者は3つ入力します。 A開始時刻の時 B開始時刻の分 C完了までの時間(分間) 開始時刻は、A時B分でそのままテーブルに保存できます。 終了時刻は、(A時B分+C分の計算結果の時部)時(A時B分+C分の計算結果の分部)分 としてテーブルに保存できますが、どのように表記したらよいのでしょうか? よろしくお願いいたします。 ( Windows XP : Access 2002 )