日付の計算式についてアドバイスをお願いします

このQ&Aのポイント
  • フォームにテキストボックスを使った日付の計算式についてアドバイスをお願いします。
  • 計算フォームにレコードソース無しのテキストボックスを追加し、西暦と日数を入力することで、過去の月日と曜日を知りたいです。
  • 計算フォームにテキストボックスを追加する方法や入力する値の意味について教えてください。
回答を見る
  • ベストアンサー

日付の計算式についてアドバイスをお願いします

レコードソース無しのフォームにテキストボックスを三個作って、西暦月日「任意」を入力し日数「数値」を入力することで、後日「月日と曜日」と遡っての過去「月日と曜日」を知りたいと思っています。正直、計算フォーム「よろず計算用」として既に使っているフォーム「エリアに余裕」への追加になります。 I,フォーム名:計算フォーム II,テキストボックス 1,テキストボックス名:西暦 = 西暦入力(英数半角) 2,テキストボックス名:日数 = 日数入力(英数半角)  ・日 数:1日を1とする  ・後 日:正の整数を入力  ・遡り日:負の整数を入力(-数値) 3,テキストボックス名:対象日= 対象日表示 以上ですが、宜しくお願いします。

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

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

>クリックしないで「2017/05/08(月)」表示は可能でしょうか クリックは関係ないです。書式の年のyは4つです。 yyyy/mm/dd(aaa)とyを1字除去して下さい 入力は同じ場所に西暦 2017/05/08 または 和暦 h29/5/8 で結果は同じです 書式の詳細は前回の参考URLの最後尾を参考にして下さい

eokwave
質問者

お礼

chayamati レベル12様へ 自分自身がもっと確りすべきでした「学習の場であることの初心忘れ」。お恥ずかしい限りです。最初のアドバイスで終了していた内容です。更には、学習用「教材」としてのアドレスも見ていませんでした。 http://www11.plala.or.jp/koma_Excel/contents1/mame1003/mame100301.html 最初のアドバイスの通り完了致しました。ありがとうございました。

その他の回答 (5)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

No3、No5の続きですが、 キー解放時のイベントを入れる場合は、更新後処理のイベントは なくしておいてくださいね。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

クリックしないで表示するばあいは、当然ながらVBAコードを 書くようになります。 No3のテキストボックスの名前のままにしていますが、 数値をtx2に入力したときの「キー解放時」のイベントに 以下のようにします。 この場合は、   CLng(Me!tx2.Text) のように、tx2のTextプロパティを使用してキー入力の データを先読みして日付処理の式にデータを渡して 処理をしています。 なお、一応念のためにClngとかCDateなどのデータ変換用の関数を 使っています。 Private Sub tx2_KeyUp(KeyCode As Integer, Shift As Integer) On Error Resume Next Me!tx3 = Format(DateAdd("d", CLng(Me!tx2.Text), CDate(Me!tx1)), "yyyy/mm/dd(aaa)") End Sub On Error Resune Nextを入れたのはtx1からtx2にフォーカスが 移動したときに先読みでデータを読み取るので空のデータが Me!tx3 = Format(DateAdd("d", CLng(Me!tx2.Text), CDate(Me!tx1)), "yyyy/mm/dd(aaa)") という処理式に渡ってエラー表示が出るのを阻止するためです。 なお、この場合他のエラー処理は入れていません。 なお、tx3には処理をしたデータが表示されますが、tx2の数値を 訂正して再度入力するときにtx2が空になったときにtx3にはデータが 残るので何となくブルーに感じるならば、以下のようにtx2の変更時の イベントを入れておいてもいいです。 Private Sub tx2_Change() If IsNull(Me!tx2) Then Me!tx3 = "" End If End Sub なお、日付処理などはAccessのヘルプに掲載さrているのでよく 読んでみてください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

tx1、tx2、tx3はテキストボックスの名前です。 それぞれ以下のコード中のテキストボックス名を 実際に合わせて変更してください。 tx1  日付を入力 tx2  数値を入力 tx3  日付を表示 tx2に数値を入力した更新後処理のイベントに以下を 行ないます。なお、コード中にエラー処理を一括で入れていますが tx1の更新後処理で日付であるかのチェックをいれてもいいです。 Private Sub tx2_AfterUpdate()  If Not IsDate(Me!tx1) Then    MsgBox ("日付の入力が不正です")  Exit Sub  End If  If IsNull(Me!tx2) Then    MsgBox ("数値を入力してください")    Exit Sub  End If  If Not IsNumeric(Me!tx2) Then    MsgBox ("数値を入力してください")    Exit Sub  End If  '以下が日付の処理です。  Me!tx3 = Format(DateAdd("d", CLng(Me!tx2), CDate(Me!tx1)), "yyyy/mm/dd(aaa)") End Sub

eokwave
質問者

お礼

piroin654 レベル13様へ アドバイスをありがとうございました。私のレベルが低すぎるために皆様へご迷惑をおかけしております。実は「yyyyy/mm/dd(aaa)」の記述で「y」が1個多かった事による表示の不具合でした。申し訳ございませんでした。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

ACCESSですね ・日付、時刻はシリアルナンバーという正の実数(少数点以上が日付で小数点以下が時刻)です。 ・西暦、和暦は同じシリアルナンバーで表示形式(yyyy/mm/dd又はge/mm/dd)です。 ACCESSはEXCELに比べてい関数が少ないので、次のように基準日より処理しています。 この式はEXCELでも通用します。 Private Sub 基準日_AfterUpdate() 翌日 = 基準日-1 前日 = 基準日+1 月初日 = 基準日 - Day(基準日) + 1 月末日 = 月初日 + 31: 月末日 = 月末日 - Day(月末日) End Sub

参考URL:
http://www11.plala.or.jp/koma_Excel/contents1/mame1003/mame100301.html
eokwave
質問者

補足

有難うございます。ご面倒をお掛けしています。やり直してみましたところ下記の様になりましたので、ご報告させていただきます。 書式:yyyyy/mm/dd(aaa) テキストボックス「非連結」名前「西暦」へ 2017/03/19 入力 テキストボックス「非連結」名前「日数」へ 50 入力 テキストボックス「非連結」名前「対象日」= 2017128/05/08(月) と表示。テキストボックスをクリックすると「2017/05/08」と表示されますが。クリックしないで「2017/05/08(月)」表示は可能でしょうか。 書式:ge/mm/dd(aaa) テキストボックス「非連結」名前「西暦」へ 2017/03/19 入力 テキストボックス「非連結」名前「日数」へ 50 入力 テキストボックス「非連結」名前「対象日」= H29/05/08(月) と表示されました。 以上、宜しくお願いします。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

対象日のセルに、 =西暦のセル+日数のセル と入力し、書式を yyyyy/mm/dd(aaa) にしてみて下さい。

eokwave
質問者

補足

aokii レベル14様へ 早速のアドバイス有難うございます。実施しましたところ下記の状況になっています。どこがおかしいのでしょうか、ご指導をお願いします。 テキストボックス「非連結」名:西暦 へ 2017/03/19 入力 テキストボックス「非連結」名:日数 へ 50 入力 テキストボックス「非連結」名:対象日 = 2017/03/1950 と表示 テキストボックス「非連結」名:西暦 へ 2017/03/19 入力 テキストボックス「非連結」名:日数 へ -50 入力 テキストボックス「非連結」名:対象日 = 2017/03/19-50 と表示 以上、宜しくお願いします。

関連するQ&A

  • 日付を使った計算式を教えてください

    [環境紹介] WINDOWS10、ACCESS2007(令和表示はテンプレートを使用して表示中) 「令和表示の式です」 =DLookUp("和暦","T_和暦マスタ","開始年月日<= #" & [txt日付] & "#and 終了年月日>=#" & [txt日付] & "#") [やりたいこと] 過去や未来の対象日や日数を下記のやり方で実施しています。「曜日」と「和暦」の表示方法(式)が分からずアドバイスをお願いできませんでしょうか。今の知識レベルで質問内容に対する可能可否の判断ができませんので、無理難題の質問内容でしたらご理解とご了承を賜りたいと思います。 [やっていること] 事前に設計しないでテーマを増やしたこともあり、テキストボックスの名前に整合性がありません。将来新たなデータベースを作る時(自分で納得できる知識が習得・・・)の課題と認識しております。 ■起点日→幾日後の月日(起点日から後日の西暦日を表示) テキストボックス名:西暦2「カレンダー入力」 テキストボックス名:日数2 手打ち テキストボックス名:対象2 コントロールソース「 =[西暦]+[日数] 」 ■起点日→対象日迄の日数(起点日から後日の日数を表示) テキストボックス名:開始「カレンダー入力」 テキストボックス名:終了 手打ち テキストボックス名:日数 コントロールソース「 =[着地日]-[開始日] 」 ■起点日→幾日前の月日(起点日から前日の日数を表示) テキストボックス名:西暦55「カレンダー入力」 テキストボックス名:日数55 手打ち テキストボックス名:対象55 コントロールソース「 =[西暦1]+[日数1] 」 [やってみたこと] ■起点日→幾日前の月日(起点日から前日の日数を表示)を例にとりあえず曜日でのチャレンジです。 テキストボックス名:西暦1「カレンダー入力」 テキストボックス名:日数1 手打ち テキストボックス名:対象1 コントロールソース「=[西暦1]+[日数1] テキストボックス名:曜日1 コントロールソース「 =WeekdayName(Weekday(対象1)) 」 結果はエラーでした。 以上ですが、宜しくお願いします。

  • VB2008で日付と時間の計算

    教えて下さい。 VBで日付と時間の足し算をしたいのですがやり方がわかりません。 フォームに6つのテキストボックスを配置し、6つのテキストボックスには それぞれ日・時・分の数値を入力します。 例えばヤフーオークションの終了時刻を計算したい場合、 TextBox1~3に現在の日時を入力し、TextBox4~6に残り時間を入力します。 現在時刻 [4] 日 [17] 時 [44] 分 残り時間 [3] 日 [6] 時間 [30] 分 この数値の足し算結果をメッセージボックスに終了時刻として表示させるようにしたいのですが、やり方が分からず困ってます。 教えていただけないでしょうか。

  • 日数計算の「-」表記に対する処理方法について

    [パソコン環境のご紹介] アプリケーション環境:ACCESS2007 OS環境:Windows10 [困りごとの内容] 食材管理データベース「消費期限管理」を作りましたが、日数計算の「-数(日)」表記に対する処理方法が分からず困っています。 [やりたいこと] 1、テキストボックス「期限」の日数表記が「-数(日)」になったときに「 0 」か  「空白」で表示させたいと思っています。 2、現在の設定では「数値」のみの表記ですが「日」を追加が可能であれば実現した  いと思います。 [やっていること(オブジェクトの一部にて紹介)] 食材管理フォームに以下のテキストボックスがあり、消費期限日までの日数を表示しています。 ・日付 名前:txt日付(西暦) ・消費期限日 名前:期限日(西暦) ・消費期限日数 名前:期限 ※消費期限日数(期限)テキストボックスのコントロールソースに以下の式を入力しています。 =[期限日]-[txt日付] 以上ですが、よろしくお願いします。

  • ACCESSの日付について。

    テキストボックスが4つあります。 それぞれのテキストボックスに テキストボックス1⇒「西暦」 テキストボックス2⇒「月」 テキストボックス3⇒「日」 を入力し、テキストボックス4にそれらを合わせた ⇒「西暦」/「月」/「日」 とかえすようにしたいのですが、 それそれのテキストボックスの『書式』・『コントロールソース』はどのようにしたら良いでしょうか? 宜しくお願い致します。

  • Word2003 日付の書式書式ggge年M月について教えてください。

    日付の書式について思った通りの結果にならず、困っています。 あるテキストを使用して、フォームの作成をしています。 テキストボックスフォームで、日付の書式が異なる「日付」を2つ作る指示があります。 指示通りに作成し、作成後に入力をすると思い通りの結果が得られません。 下記に指示と結果を記します。 <テキストの指示> ※テキストボックスフォームフィールドを2箇所設定、各々のオプションで下記の設定を行うものです。 (1)種類「日付」、日付の書式「ggge年M月d日(aaa)」  ヘルプの追加でステータスバーに"半角で西暦下2桁/月/日を入力"と表示させる。 (2)種類「日付」、日付の書式「ggge年M月」  ヘルプの追加でステータスバーに"半角で西暦下2桁/月を入力"と表示させる。 <入力結果> (1)の箇所に"09/06/27"と入力すると、"平成21年6月27日"と思い通りの結果が表示されます。 (2)の箇所に"09/06"と入力すると、"平成21年9月"と表示されてしまいます。 (2)の箇所に"2009/06"と入力すると、"平成21年6月"と思い通りの結果が得られます。 "ggge年"は、西暦4桁で入力されるべきものなのでしょうか? テキストにあるヘルプの追加で表示させる"半角で西暦下2桁/月を入力"は正しいのでしょうか? どなたかご存知の方がいらっしゃいましたら教えてください。

  • VB2005テキストボックスへのコピペ制御についての質問です。

    VB2005テキストボックスへのコピペ制御についての質問です。 フォーム上にテキストボックスを用意し、数値しか入力させず、整数が入力される予定です。 数値のみを入力させることは出来たのですが、コピペを行うと数値でも文字でも貼りつけ出来てしまいます。 これを制限する方法はあるのでしょうか?

  • フォーカスを取得すると、自動的に半角英数にする方法

    いつもお世話になっております。 フォーム上にテキストボックスを配置し、 そこにフォーカスがきたときに自動的に 半角英数入力にする方法はあるのでしょうか? お分かりの方がおられましたら、よろしく お願いいたします。

  • 関数を使わないで日付の計算をしたいのですが。

    2007,7,5,4 年,月,日,曜日(0が日曜日) の入力から、+10日後の日付と曜日を求めたいのですが、 関数を一切使わず計算式と場合分けのみで計算する方法ありますか? 今考えている方法は、地道に、ある基準1970年1月1日をシリアル値で0としそこから、今日までの日数を1月は31、2月は28にちなどを考えてを足していき、シリアル値を算出。 そのシリアル値に+10した値を再び年月日曜日の形に戻す方法しか無いのかと考えています。

  • 計算をFLASHかjavascriptで

    FLASH8 win を使っております。 ホームページ上に FLASHかjavascriptで計算表を作りたいと思っております。 たとえば (1)のテキストボックスに任意数値入力 (2)のテキストボックスに任意数値入力 ((1)テキストボックス-(2)テキストボックス)×7000=(3)テキストボックス (3)テキストボックス÷30=(4)テキストボックス のように(1)と(2)を入力すれば(3)と(4)が自動入力されるような仕組みは どのようにしたらよろしいのでしょうか。 よろしくお願い申し上げます。

  • 入力条件の指定・・・・

    いつもお世話になってます。 Windows2000/ACCESS2000を使用してます。 既にフォームは作成できてるのですが、フォームのテキストボックスに入力する時に全角の英数で入力しないといけないみたいな設定って出来るのでしょうか? 入力する人によって、電話番号を半角の英数で入力したり、全角の英数で入力したりする人っているので、統一させる為にも一定の条件でしか入力出来ないようにする方法ってあるのでしょうか? あと、苗字と名前の間に1つスペースを空けるように設定するとか・・・。 テキストボックスのデーターの入力規則のところに単に全角英数とか書けば良いのでしょうか? お手数かけますが、宜しくお願いします。

専門家に質問してみよう