dポイントプレゼントキャンペーン実施中!

いつも助けて頂きありがとうございます。

今回は日付型のエラーについて質問があります。
dateserial関数を使って8ケタ数字を日付に変換したのですが、クエリやフィルタでの抽出の時にエラーになってしまいます。
受付日は8ケタの数字型(長整数)になっています。

dateserial(left([受付日],4),mid([受付日],5,2)+1,1)
これを日付でたとえば
#2011/1/1#等で抽出しようとすると型が一致しないエラーが出てしまいます。

isdate(dateserial(left([受付日],4),mid([受付日],5,2)+1,1)
を見ると-1で日付としては認識しているとは思うのですが。

何が原因か、ご助言お願いします。
)

A 回答 (4件)

SELECT DateSerial(Left([テーブル1]![UDATE],4),Mid([テーブル1]![UDATE],5,2),1) AS 式1


FROM テーブル1
WHERE (((DateSerial(Left([テーブル1]![UDATE],4),Mid([テーブル1]![UDATE],5,2),1))=#1/1/2011#));

私のacc2000では上記のクエリは実行可能で該当レコードが選択されましたので、何らかの単純な記載間違いの可能性が高いと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

皆さんが出来ているのでやはり私のミスでしょう。

それがどこかがなかなか見つかりません・・・

ありがとうございました。

お礼日時:2011/04/28 09:42

> #2011/1/1#等で抽出しようとすると型が一致しないエラーが


> 出てしまいます。

クエリで、演算フィールドに抽出条件や並べ替えを指定したときに
型不一致エラーが出る場合、データが「Null」(空白)になっている
レコードがある、というパターンが(私の場合は)多いです。

ですので、まずは「空白」のデータがないか確認してみることを
お勧めします。


あった場合の対処法ですが・・・

a)「受付日」が空白のものを除外してよいなら、そのフィールドに
 「Is Not Null」の抽出条件をつける
b)除外しては問題がある場合は、IIF関数で場合分け:
 <一例>
 IIF(IsNull([受付日]), Null, DateSerial(Left([受付日],4),Mid([受付日],5,2)+1,1))
c)希望の結果を返すユーザー関数をVBAで定義しておいて、
 クエリではそれを使用

・・・といったところかと思います。
(「c」の利点は、IIF関数だと第1引数の結果に依らず、第3引数の
 式が演算されるのに対して、ユーザー定義関数ならIf文の分岐を
 使用することで、その演算自体を省略できる(はず)、と:
 実際の処理時間に差が生じるかの確認は行っていないので、
 事実誤認がありましたらご容赦願います(汗))

Public Function LongToDate(nDate As Variant) As Variant
On Error Goto エラー処理

  Dim Rsl As Variant

  If IsNull(nDate) Then
    Rsl = Null
  Else
    Rsl = DateSerial(Left([受付日],4),Mid([受付日],5,2)+1,1)
  End If

終了処理:
  LongToDate = Rsl
  Exit Function

エラー処理:
  Rsl = "#エラー(" & Err.Number & ")"
  Resume 終了処理

End Function
「アクセスのデータ型えらーについて」の回答画像4
    • good
    • 0
この回答へのお礼

返答ありがとうございます。

現在、nullは無いはずです。

受付日には条件でisnotnullで8ケタの数字のみ抽出しています。

他の原因を探しているのですがなかなかわかりません。

お礼日時:2011/04/28 09:36

試してみましたが、それで特に問題なく処理しますね。


Access2003です。
「アクセスのデータ型えらーについて」の回答画像3
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私も受付日以外に発送日等の8ケタ日付があるのですが、受付日を後回しでやってみるとこちらは同じなのに抽出できました。データの抽出も同じなのですが・・・

お礼日時:2011/04/28 09:38

こちらでクエリーを作成して試してみましたがエラーにはなりませんでした。


再度作成しなおしてみてはいかがでしょう。
    • good
    • 0
この回答へのお礼

一度、やってみましたがエラーでした。

おそらくデータにミスがあると思われます。

皆様ありがとうございました。

お礼日時:2011/04/28 09:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!