- ベストアンサー
日付の計算式についてアドバイスをお願いします
- フォームにテキストボックスを使った日付の計算式についてアドバイスをお願いします。
- 計算フォームにレコードソース無しのテキストボックスを追加し、西暦と日数を入力することで、過去の月日と曜日を知りたいです。
- 計算フォームにテキストボックスを追加する方法や入力する値の意味について教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>クリックしないで「2017/05/08(月)」表示は可能でしょうか クリックは関係ないです。書式の年のyは4つです。 yyyy/mm/dd(aaa)とyを1字除去して下さい 入力は同じ場所に西暦 2017/05/08 または 和暦 h29/5/8 で結果は同じです 書式の詳細は前回の参考URLの最後尾を参考にして下さい
その他の回答 (5)
- piroin654
- ベストアンサー率75% (692/917)
No3、No5の続きですが、 キー解放時のイベントを入れる場合は、更新後処理のイベントは なくしておいてくださいね。
- piroin654
- ベストアンサー率75% (692/917)
クリックしないで表示するばあいは、当然ながら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)
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
お礼
piroin654 レベル13様へ アドバイスをありがとうございました。私のレベルが低すぎるために皆様へご迷惑をおかけしております。実は「yyyyy/mm/dd(aaa)」の記述で「y」が1個多かった事による表示の不具合でした。申し訳ございませんでした。
- chayamati
- ベストアンサー率41% (260/624)
ACCESSですね ・日付、時刻はシリアルナンバーという正の実数(少数点以上が日付で小数点以下が時刻)です。 ・西暦、和暦は同じシリアルナンバーで表示形式(yyyy/mm/dd又はge/mm/dd)です。 ACCESSはEXCELに比べてい関数が少ないので、次のように基準日より処理しています。 この式はEXCELでも通用します。 Private Sub 基準日_AfterUpdate() 翌日 = 基準日-1 前日 = 基準日+1 月初日 = 基準日 - Day(基準日) + 1 月末日 = 月初日 + 31: 月末日 = 月末日 - Day(月末日) End Sub
補足
有難うございます。ご面倒をお掛けしています。やり直してみましたところ下記の様になりましたので、ご報告させていただきます。 書式: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/22063)
対象日のセルに、 =西暦のセル+日数のセル と入力し、書式を yyyyy/mm/dd(aaa) にしてみて下さい。
補足
aokii レベル14様へ 早速のアドバイス有難うございます。実施しましたところ下記の状況になっています。どこがおかしいのでしょうか、ご指導をお願いします。 テキストボックス「非連結」名:西暦 へ 2017/03/19 入力 テキストボックス「非連結」名:日数 へ 50 入力 テキストボックス「非連結」名:対象日 = 2017/03/1950 と表示 テキストボックス「非連結」名:西暦 へ 2017/03/19 入力 テキストボックス「非連結」名:日数 へ -50 入力 テキストボックス「非連結」名:対象日 = 2017/03/19-50 と表示 以上、宜しくお願いします。
お礼
chayamati レベル12様へ 自分自身がもっと確りすべきでした「学習の場であることの初心忘れ」。お恥ずかしい限りです。最初のアドバイスで終了していた内容です。更には、学習用「教材」としてのアドレスも見ていませんでした。 http://www11.plala.or.jp/koma_Excel/contents1/mame1003/mame100301.html 最初のアドバイスの通り完了致しました。ありがとうございました。