Access の SQL には、andalso が無いため、CDateでのヌル等のエラーを回避するためには、 
IIf を使用します。
  
IIf は、慣れると使い易い命令です。(Excelのワークシート関数では、if が iif のような構文です)
  
IIf (条件式,真の場合,偽の場合)
  
とします。
  
つまり、フィールド「登録日」がテキスト型であるとして、whereの中で日付として扱いたい時、Access SQL では、
  
select * from [tablename] where Isdate(登録日) andalso CDate(登録日) >= #2025/06/21#
  
のような構文が使えないため、
  
select * from [tablename] where IIf (Isdate(登録日) , CDate(登録日) >= #2025/06/21# , False)
  
のように記述します。
  
サブクエリを使用する方法もありますが、私は IIf を使用しています。サブクエリを使用する方法は以下です。
  
SELECT * FROM ( 
  SELECT * FROM tablename WHERE IsDate(登録日) = True) AS SubQuery 
WHERE CDate(登録日) >= #2025/06/21#;
  
使いやすい方を採用してください。
  
以上で、説明は終了です。
  
 |