- ベストアンサー
Accessで経過日付に応じて色をつけたい
Accessで各社員に業務改善案を入力してもらうDBを作成しています。登録時に日付を自動取得するようになっています。定期的に改善案を出してもらいたいので、前回登録日からの経過日数に応じて段階的に色を変えて(2週間経過はは青色・1ヶ月経過は黄色・2ヶ月以上経過は赤色など)、各々前回の入力からどのくらい経っているかわかるようにしたいのですが、可能でしょうか?
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
この手法、知りませんでした。返って、助けてもらいました。 ところで、 >"d"ではなく"m"の月指定でないと上手くいかなかったのが良く分かりませんが、 うちの場合、"d"でOKで4色表示ができました。フィールド名はうちが使っているそのままですが・・・・ DateDiff("d",[日付],Date())>=1 And DateDiff("d",[日付],Date())<14 DateDiff("d",[日付],Date())>=15 And DateDiff("d",[日付],Date())<30 DateDiff("d",[日付],Date())>=31 And DateDiff("d",[日付],Date())<60
その他の回答 (8)
NO2の方法でやってください。 今試されている方法は、表形式には向きません。
お礼
ご相談に乗って頂きましてありがとうございました。No2の方法もまた試してみます。
>Excelと同じような「条件付書式」の項目を発見し 具体的に書いてもらえたりするとこちらも参考になるのですが。。。 それと、#6さんのご指摘のように、レコード移動時(Form_Current)?にも同じコードを書いている方がいいかもしれません。 普段、Form_Currentが発生しない設計をしているもので、気づきませんでした。
補足
以下の方法が参考になれば嬉しいです。書式メニューから条件付書式という項目を選び、条件式の所に「DateDiff("m",[Getdate],Date())>=1 And DateDiff("m",[Getdate],Date())<2」の様に入れて条件に合致する場合の色を指定しました。条件は3つまで作成できる様でいずれにも合致しない場合も含めると4通りの色分けができます。DateDiff関数の所でなぜか、"d"ではなく"m"の月指定でないと上手くいかなかったのが良く分かりませんが、条件付書式を使用するとExcelレベルの私の知識でもできました。
Form_OpenやAfterUpdateのイベントが発生した時点に書き込んだら、レコードが移動しても動作しませんので、一番最初のレコードの色指定のままとなりませんか?(単票フォームで1件ずつフォームを開け閉めするなら構わないと思います。) 動作確認していませんが、「レコード移動時」(だったっけ?)あたりに記述してはいかがでしょうか?
補足
「レコード移動時」の欄がありましたので、記述してみたのですが、反映されないようです。1件ずつレコードを開け閉めするタイプではなく、表形式で作成していますので、プロシージャでは難しいようです。引き続きのアドバイスありがとうございます。
> Private Sub 取得日_AfterUpdate() でなくて Private Sub GetDate_AfterUpdate() ですよね? どのコントロールでイベントを発生させるかも、状況がわからないのでズバリとは言えないかもしれませんが。。。
お礼
イベントプロシージャにももっと強くなりたいので、引き続き色々試してみたいと思います。アドバイスありがとうございました。
補足
色々と試してみたのですが、なぜか色がつきません。。上手くイベントの選択ができていないのではないかと。。今回はAccessのメニューを開いている際に、Excelと同じような「条件付書式」の項目を発見し、その欄にdatediff関数で入力してみた所、何とか色がつけられました。
構文はそれでいいと思いますよ。 どのイベントに貼るかは具体的な運用方法がわからないので何とも言えません。ご自身でこれだと思われたところに貼られていいと思います。 テーブルと連動しているのならForm_Openでもいいかもしれません。 ただ、値を手動で直す場合があるのなら Private Sub 取得日_AfterUpdate() If IsDate(Me![GetDate]) Then Select Case DateDiff("d", Me![GetDate], Date) Case 0 To 14 Me!GetDate.BorderColor = lngRed '色づけ処理 Case 15 To 30 Me!GetDate.BorderColor = lngYellow '色づけ処理 Case 31 To 60 Me!GetDate.BorderColor = lngBlue '色づけ処理 End Select End If End Sub のように、入力値が日付として正当なものかチェック入れるのもいいかと思います。
' #1 です。 ' 間違っていました。 ' Case の条件には間隔を持たせてください。 ' 条件設定には#2さんの方法とか他にもいろいろあると思います。 ' それぞれがそれらの一つです。 Select Case Datediff("d",Me![登録日],Me![前回登録日]) Case 0 to 14 '色づけ処理 Case 15 to 30 '色づけ処理 Case 31 to 60 '色づけ処理 End Select
補足
フォームで、色を変えたい「日付」のテキストボックスのプロパティ→イベントのタブで、どの欄に、教えて頂いたイベントプロシージャをセットして良いのかわかりませんでした。セットする構文は、 Private Sub 取得日_AfterUpdate() Select Case DateDiff("d", Me![Getdate], Date) Case 0 To 14 Me!Getdate.BorderColor = lngRed '色づけ処理 Case 15 To 30 Me!Getdate.BorderColor = lngYellow '色づけ処理 Case 31 To 60 Me!Getdate.BorderColor = lngBlue '色づけ処理 End Select End Sub とすれば良いのでしょうか?(本日から何日経過しているかで色を変える場合) 的外れな文になっているかもしれませんが、 アドバイス頂けますと有難いです。
入力枠とは別に表示用に同じテキストボックスを4つ同じ場所に作ります。 背景は透明にします。 同じ場所に4つ重ねて作って、条件に合う時に表示させれば、経過日数によって表示する色が変わって見えます。 1つめは前配色を「黒」にして、レコードソースには =iif(DateDiff("d", 前回登録日,date())<14,前回登録日,null) 2つめは前配色を「青」にして、レコードソースには =iif((DateDiff("d", 前回登録日,date())>=14) or (DateDiff("d", 前回登録日,date())<30),前回登録日,null) 3つめは前配色を「黄色」にして、レコードソースには =iif((DateDiff("d", 前回登録日,date())>=30) or (DateDiff("d", 前回登録日,date())<60),前回登録日,null) 4つめは前配色を「赤」にして、レコードソースには =iif(DateDiff("d", 前回登録日,date())>=60) ,前回登録日,null) にしてはどうでしょうか。 ACCESSのバージョンがわからないので、古いもの(ACCESS97、2000)でも動作する方法を例示しました。 ACCESS2002では、もっと簡単にできる指定方法があるかもしれません。
お礼
回答ありがとうございます。Accessのバージョンが2000なもので、2002程には簡単にはできないかもしれませんね。「matubokkuri」さんに教えて頂いた方法でも試してみようと思います。まずは「oshiete_kun」さんの方法でできないか試行錯誤している所です。
おそらく、色を付けると言うことなので、フォーム上のことと想像します。クエリやテーブル上では不可です。 Select Case Datediff("d",Me![登録日],Me![前回登録日]) Case 14 Case 30 Case 60 End Select Datediff関数で経過日数を求め、その結果を14日、30日、60日・・・・と仕分けして、色を付けたいコントールの背景色でも決めてやればいいと思いますよ。 "d"は日にちを比較します。"m"、"y"にすれば月や年を比較します。
お礼
早速の回答ありがとうございます。ずっと一人で悩んでいたので、アドバイス頂いて感謝感激です!!
お礼
上記を参考に"d"で入れ直しましたら、4色表示上手くいきました。どこか1文字間違えていたのかもしれません。この度は色々とご相談に乗って頂きましてありがとうございました。