• ベストアンサー

Access2007 日付による条件書式のしかた

よろしくお願いします。 Access2007を使うことになったのですが、あまり詳しくありません。 レポートで[日付]が入力されている欄があり、一番新しい日付のデータの背景色を付けたいと思っています。 レポートは以下のような感じで、データは、[金額]の数値により並べ替えがされています。  [金額]  [日付]  5,250   2014/05/31  3,400   2014/03/01  2,000   2014/04/11  4,680   2014/06/01 条件付き書式で出来るのではないかと思うのですが、よくわかりません。よろしくお願いします。 どうぞよろしくお願いします。

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

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

【単純な設定ミスの検証】 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)   If Me.日付 = DMax("日付", Me.RecordSource) Then     Me.日付.BackColor = RGB(255, 0, 0)   Else     Me.日付.BackColor = RGB(255, 255, 255)   End If End Sub 普通にウィザードで生成したレポートの詳細部ではDMax()=Max()が成立します。その場合、全くエラーが出ずにバックカラーが変更されないことはありえません。その場合に考えられるのは、バックカラーを設定し忘れていることです。そのことは、上記のコードを Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)   ここにコピペ End Sub することで検証できます。 仮に、これでバックカラーが変われば<[日付]=Max([日付])>でも実現できる筈です。

Robert1961
質問者

お礼

ありがとうございました。 最後まで丁寧にアドバイスをいただきまして、たいへん勉強になりました。 これからも自分なりにスキルを磨いていきたいと思います。

Robert1961
質問者

補足

ありがとうございます。 ご指摘いただいたとおり、背景色が透明にになっておりました。

その他の回答 (9)

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.10

横から失礼します。 条件式が正しいにもかかわらず バックカラーが変更されない(表示されない)場合として テキストボックスの「背景スタイル」が「透明」になっていることが考えられます。 プロパティをご確認ください。

Robert1961
質問者

補足

ご指摘の通り、背景が「透明」になっておりました。 この部分をなおしたら、表示されました。 みなさんありがとうございました。

回答No.8

補足:1と2とは、同じようですが厳密には違います。 詳細部においては、両者の差異は表面化しません。ですから、極めて特殊な場合においてのみです。

回答No.7

もしかしたら・・・・。 Max([日付])<>DMax("日付", "クエリ6") ということが表面化しているのかもです。 1、Max([日付])・・・・・・・・・・・・・・・・・レポートの特定グループ内の最大値 2、DMax("日付", "クエリ6")・・・・・・レポート内の最大値 1と2とは、同じようですが厳密には違います。

回答No.6

エラーも出ない代わりに色も変わらないということ? もう一度試してみてください。 念のために旧Access2002でも確認してみました。 2007だけダメってことは無いハズです。 『日付』という名前のフィールドはありますよね?

回答No.5

Access2007は持ち合わせておりませんが 『式』に、[日付]=Max([日付]) で良さそうに思えますけど? レポートを開くときにフィルターを設定していても大丈夫ですし。。。

Robert1961
質問者

補足

ありがとうございます。 試してみましたが、出来ませんでした。 他の方法をご存じでしたらご紹介いただけると助かります。

回答No.4

補足: 先に回答No.2でアタック。 ・売上伝票は添付図のようです。 ・回答1のクエリは、 SELECT   売上伝票.ID,   売上伝票.日付,   売上伝票.伝票番号,   売上伝票.売上金額合計,   CBool(DCount(    "*",    "売上伝票",    "日付 > #" & [日付] & "# AND 日付 <= #8/19/2014#")=0)     AS 最新日付   FROM 売上伝票   WHERE (((売上伝票.日付)<=#8/19/2014#)); ・回答2のクエリは、 SELECT   売上伝票.ID,   売上伝票.日付,   売上伝票.伝票番号,   売上伝票.売上金額合計,   FROM 売上伝票   WHERE (((売上伝票.日付)<=#8/19/2014#));  回答2の場合は、[最新日付]を判定も求めてもいません。条件付き書式設定で  DMax("日付", "クエリ6") で値を指定しています。 まあ、超簡単なのはNo.2のやり方でしょう。それに成功されたら、NO.1のやり方も試されたらどうでしょう。

回答No.3

Q、常に今日を基準に・・・。 A、それは、ありえません。 最新日付=DMAX([日付],"クエリXXX") [最新日付]とは、あくまでもレポートのもととなっているクエリ等に含まれる行の中の最大値です。WHERE節の条件を基準にする必要があります。その条件が今日であれば、それはそれでOKです。

回答No.2

補足: クエリ改変が面倒ならば・・・

回答No.1

添付図では、あらかじめ[最新日付]という列を生成しています。これは、非表示にすべきですが、ここでは表示しています。こういう仕掛けをすると、簡単に[条件付き書式]を設定できるかと思います。 SELECT   売上伝票.ID,   売上伝票.日付,   売上伝票.伝票番号,   売上伝票.売上金額合計,   CBool(DCount("*",            "売上伝票",            "日付 > #" & [日付] & "# AND 日付 <= #8/19/2014#")=0) AS 最新日付 FROM 売上伝票 WHERE (((売上伝票.日付)<=#8/19/2014#));

Robert1961
質問者

補足

f_a_007 様 早速回答を寄せていただきましてありがとございます。 回答内容の式で以下の部分についてですが   "日付 > #" & [日付] & "# AND 日付 <= #8/19/2014#")=0) AS 最新日付 #8/19/2014# の部分ですが、8月19日を基準にするという意味ですか。 常に今日を基準にするようにできたらいいのですが、そのようにはできるでしょうか。

関連するQ&A