MS Accessの条件付き書式は数字の最初の桁のみを比較します

MS Accessの条件付き書式は数字の最初の桁のみを比較します

仕事のプロジェクト用に Access データベースを持っていますが、残念ながら仕事の性質上、あまり多くの詳細を共有することはできません。しかし、基本的には、実行する必要のあるアクションのテーブルがあり、各アクションには期限があり、以下のロジックを使用して、各月に期限が迫っていて完了したアクションの数をカウントするテーブルがあります。

Group by Month([Due Date])
Count [Due Date]

1 つのクエリでは、完了した日付に対しても同じです。次に、期日クエリ、完了した日付クエリ、および年間の月テーブル (そうでない場合、空の月は表示されません) を使用する最終クエリを作成します。次のようになります。

Nz(Due Dates Totals.Count,0)
Nz(Completed Dates Totals.Count,0)
Calendar.Month Number
Calendar.Month Name

(Nz上記の「」はレポートに空白がないようにするためです)

私のレポートでは、月番号を使用して並べ替えとグループ化を行い、月名を使用してユーザーに月を表示し、期限のアクションと合計アクションを含む小さなテーブルを使用します。次に、テーブルに条件付き書式を設定して、完了したアクションが期限のアクションより少ない場合は赤で強調表示し、等しい場合は緑で強調表示し、完了したアクションが期限より多い場合は「完了」フィールドが青になるようにします。

これは、数字の1つが2桁でない限りは正常に動作します。2桁の場合は、各値の最初の桁のみを比較します。例:19 < 2

フィールドの値をクエリ自体の期限カウントと比較し、レポートのフィールドの値と比較してみましたが、どちらも同じ問題が発生します。数値ではなく文字列として比較しているのではないかと思いますが、クエリにカウントを数値として保存させる方法がわかりません。

ご協力をお願いいたします。(ちなみに、データベースには他にもテーブルなどがあるので、Excel はこの作業に適したツールではありません)。

答え1

MS Accessが数値を文字列として解釈している場合は、次のいずれかを使用して文字列値を数値データ型に強制変換/キャストできます。型変換関数どちらを選択するかは、データの性質によって決まります。

  • CCur(通貨へ)
  • CDbl(倍にする)
  • CDec(10進数)
  • CInt(整数へ)
  • CLng(ロングへ)
  • CSng(シングルへ)

整数を扱っているようなので、CInt値が 32767 (2 15 -1)を超える可能性がある場合は、 または のいずれかを使用することをお勧めしますCLng

したがって、コードは次のようになります。

CInt(Nz([Due Dates Totals].Count,0))
CInt(Nz([Completed Dates Totals].Count,0))
Calendar.[Month Number]
Calendar.[Month Name]

答え2

解決策を見つけました。関数を掛け合わせるNz()ことで1、文字列ではなく数値になるように強制しました。

例えば、

Nz(Due Dates Totals.Count,0)

私は

1 * Nz(Due Dates Totals.Count,0)

関連情報