• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS2000にて「うるう年」のチェック)

ACCESS2000でうるう年チェックを行う方法

このQ&Aのポイント
  • ACCESS2000でフィールドの入力規則を使ってうるう年のチェックを行いたいです。値のチェックはするが、チェックした値の入力も許可したいです。例えば、うるう年の2月28日を入力した場合に警告を表示し、ユーザーが手動で2月29日に修正することもできるようにしたいです。
  • テキストボックスの入力規則を使うと、警告は出るが、禁止した値を入力することはできません。マクロを使っても良いですが、VBAは得意ではないため、フィールド名やフォーム名を変えて利用することができるような方法を教えていただけると助かります。
  • ACCESS2000でうるう年のチェックを行う方法について教えてください。フィールドの入力規則を設定しても、チェックした値の入力ができないため、うるう年の2月28日を入力した場合でも、ユーザーが手動で2月29日に修正することができません。VBAを使用せずに、フィールド名やフォーム名を変更して利用できる方法を教えてください。

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

  • ベストアンサー
回答No.4

閏年判定関数は下記でもいいですね。 Public Function IsLeapYear(aYear As Long) As Boolean   IsLeapYear = IsDate(aYear & "/2/29") End Function

du-sama
質問者

お礼

完璧です! ちゃんとうるう年だけ判定出来るようになりました。 早急に回答頂き、大変助かりました。 ありがとうございました。

その他の回答 (3)

回答No.3

Public Function IsLeapYear(aYear As Long) As Boolean   IsLeapYear = Month(DateSerial(aYear, 2, 29)) = _          Month(DateSerial(aYear, 2, 28)) End Function Private Sub テキスト7_BeforeUpdate(Cancel As Integer) Const cMsg = "閏年ですけど、2/29じゃなくて大丈夫ですか?"   If Format(Me.テキスト7.Text, "mdd") = "228" And _     IsLeapYear(Year(Me.テキスト7.Text)) Then     If MsgBox(cMsg, vbYesNo) = vbNo Then       Cancel = True     End If   End If End Sub

回答No.2

> 例えば2012/2/28、2016/2/28などは「うるう年ですけど、2/29じゃなくて大丈夫ですか?」 > のような警告をし、入力しているユーザーが2/28で大丈夫であれば、2/28も入力可能 > 2/29に修正が必要であれば、ユーザーが手動で2/29と入力し直す、としたいです。 下記の関数を標準モジュールに作成します。 '閏年がどうか判定する関数 Public Function IsLeapYear(aYear As Long) As Boolean   IsLeapYear = Month(DateSerial(aYear, 2, 29)) = Month(DateSerial(aYear, 2, 28)) End Function テキストボックスの更新前処理に、 Private Sub テキスト7_BeforeUpdate(Cancel As Integer)   If Format(Me.テキスト7.Text, "mdd") = "228" And IsLeapYear(Year(Me.テキスト7.Text)) Then     If MsgBox("閏年ですけど、2/29じゃなくて大丈夫ですか?", vbYesNo) = vbNo Then       Cancel = True     End If   End If End Sub 以上でどうでしょうか。

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

VBAしかわかりませんが、月末処理が多いのなら、 月末であるかどうか判定するファンクションをつくり、 Function endofmonth(hDate) As Boolean endofmonth = False tyear = Year(hDate) tmonth = Month(hDate) If hDate = DateSerial(tyear, tmonth, 0) Then endofmonth = True End function コントロールの更新後処理などで、メッセージを出すのが楽。 Private Sub テキスト0_AfterUpdate() If endofmonth(text0) <> True Then MsgBox "月末ではありません" End If End Sub あくまでもメッセージを出すだけなので、フォーカスの移動などに関してはちょっと配慮が必要。 月末処理が特に多くないなら、うるう年だけのために判定組み込むのはめんどくさいので、 何らかのカレンダーコントロールで入力させたらどうだろう。

関連するQ&A