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

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

ACCESS2000にて「うるう年」のチェック

ACCESS2000にて、フィールドの入力規則で「うるう年」のチェックをしたいです。 値のチェックはしますが、チェックした値の入力も許可したいのですが、それができてません。 例えば2012/2/28、2016/2/28などは「うるう年ですけど、2/29じゃなくて大丈夫ですか?」 のような警告をし、入力しているユーザーが2/28で大丈夫であれば、2/28も入力可能 2/29に修正が必要であれば、ユーザーが手動で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

  • Accessチェックボックス 一度で複数のチェックを入力

    会社でAccess2000を使用しています。 ExcelからAccessテーブルへインポートしたデータで、 チェックボックスがあるフィールドがあります。(フィールド名は「請求済」です) レコードが数千件あり、1ヶ月ごとに何百単位で請求の有無を確認をしなければなりません。 複数のチェックボックスへ、一度でチェックを入力する方法はありますか? ちなみにAccessは初心者で、マクロやVBAはやったことがありません。

  • アクセス チェックボックス入力日付表示方法

    アクセス初心者で悩んでいます。 いまアクセスフォームでデータ表を作成しているのですが、その中でチェック欄があり、その欄のチェックを押した日付を別フィールドに表示させるため手動で入力を行い、それをクエリに反映させていました。これをVBAか何かでチェック欄をつけたら現在日付を自動で表示させれないでしょうか?

  • チェックボックスから得る値を格納する一番よいやり方

    次の場合どのようにするとよいか教えてください。 ■フォーム name="hoge[]"のチェックボックスが10個あります。 値は1~10とします。 ユーザーはそのうち好きな3つまでチェックできます。 例えば1,5,6など。 そのチェックされた値をデータベースに格納しておきます。 ■やりたいこと データベースからユーザーがチェックした値の中で多いものBEST3を取り出す。 例えば1:5人、2:3人、3:10人、4~10:0人なら、3,1,2が取り出されるような感じです。 ■試したこと フォームから渡された値をSET型の一つのフィールドに入れてみました。 しかし、BEST3を数える場合に、1が何人、2が何人と数えることを一度にできるSQLが思いつきませんでした。 SELECT COUNT(*) FROM テーブル名 WHERE FIND_IN_SET('数字',フィールド名)>0 (数字はこの場合1~10が入る) とやれば1つずつはカウントできますが面倒です。 これをスマートに解決する方法はありますか? チェックボックスの種類分(この場合10種類分)フィールドを作ったほうが賢いでしょうか?

    • ベストアンサー
    • MySQL
  • Access上にある日付をコピーしたい場合

    Access2000のユーザーです。 初心者に近い為理解が遅いかもしれませんがよろしくお願いします。 お尋ねしたいのは、コピーの方法です。 データの入力フォームを作っており、フォームヘッダーに日付を入力させ、同じ日付で何度も違う得意先のデータを入力する為最初に入力した日付を各レコードにコピーさせたいと思います。 マクロで値の代入を使ってコピーができないかとやってみましたが日付フィールドには日付が入っていませんでした。マクロではなくVBAでないと無理であれば初挑戦してみたいと思いますが、どの様に記述すればよいのかさっぱり・・・といった状態です。 このような説明で伝わるか不安ですが、よろしくお願いします。

  • アクセス チェックボックスについて

    チェックボックスやコンボボックスを使って入力するようにすると、フィールドに入力できるのが値だけになってしまいます。値でなく、選択した文字列を入力したいのですが、どうやったらいいのでしょうか?

  • 入力規則があるフィールドへの空文字列許可(ACCESS2000)

    フォームでフィールドAとフィールドBがあるとします。フィールドBは既に数字が入力されていて、フィールドAの入力規則に例えば ">[フィールドB]"と入れますと、入力規則は反映されますが、入力規則に反した値をいれた後、その値をDeleteして次のレコードへ移ろうとすると、入力規則に反するという内容のメッセージがでてしまいます。入力規則を">[フィールドB]or Is Null"と変えてみましたがだめでした。どなたか助けてください。

  • アクセスのフォームで

    アクセスのフォームの入力規則にテーブル1のフィールドAの最新日までというのは、以前ここで質問し、回答を頂きましたが、フィールドBが0以外のフィールドAの最新日に設定する事はできますか?又、その日までしか入力できない事をフォームの横に表記したいです。 例えば、フィールドAの中の最新日は2009/11/16だとします。ですが、フィールドBの値が0でない最新日が2009/11/3だとすれば、2009/11/3日を入力規則の最大にし、又、表記する事はできますか? 誰か教えて下さい。よろしくお願いします。

  • アクセスで重複データの入力

    アクセス97で顧客の管理しています。フォームから入力の際にカタカナで姓スペース名で入力していますが、入力の際に同じ名前があったら、メッセージでそのことが表示され、できれば内容が別フォームかテーブルでチェックできて、そこで入力を続行するか中止するか選択できるようにしたい。VBAが苦手なのでクエリーやマクロでできればうれしいのですが、簡単なVBAでできればVBAでも良いです。どなたか智恵をおかしください。

  • ACCESSの重複チェックについて

    顧客データをACCESS2003にて作成しています。 フォームにてVBAを用いて重複チェックをしているのですが、件数が多いせいかチェックに時間が掛かっております。(入力済件数は10万は超えております。) テーブル(T_顧客管理)よりチェック出来るようにしており、チェックのフィールドは「住所」にしております。 Private Sub 住所_BeforeUpdate(Cancel As Integer) If DCount("住所", "T_顧客管理", _ "住所='" & Me!住所 & "'") > 0 Then Beep MsgBox "既存のデータと同じ住所が入力されました! " & _ "別の値を入力してください。", _ vbOKOnly + vbExclamation, "重複エラー" Cancel = True Me.Undo End If End Sub 上記の式を入れておりますが、別の方法(式)にて上記と同じ内容にてチェック出来る式があれば教えていただきたいと思いますので、宜しくお願い致します。

  • VBAユーザーフォームで

     エクセルVBAでユーザーフォームより、テキストボックスで入力させたものをセルに表示させようとしています。  テキストボックスは1と2があり、テキストボックス1で入力した値の最初の5文字+固定値をテキストボックス2に自動で入力(表示)したいのですがなかなかうまくいきません。(自動入力後、手動で一部修正します。)  VBAをはじめたばかりの初心者ですが、どうぞよろしくお願いします。