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

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

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

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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESSのフォームからデータの追加ができない

現在Accessの基本を勉強中です。
テーブルを元にフォームを作成し、フォームから新しく名前や会社名などを直接入力し、追加できるようにしたいです。
ところがフォームから入力を行うと、内容が追加されず一番最初に登録した人の名前が書き換わるだけになります。
どのように新しくデータを追加できるようになるのでしょうか?
まったくの初心者なので、どの機能を使えばよいか戸惑ってます。
どうかよいご意見をお願い致しますm(__)m

Aベストアンサー

データを追加する場合は、新規レコードに移動(=新規レコードを選択)する必要があります。

最も簡単なのは・・・
そのフォームの最下方に、レコードセレクタ(『レコード: [|<][<][   1][>][>|][*]/1』といった
感じの部分)が表示されていたら、そこで『[*]』のボタンを押すと、新規レコードに移動できます。
(もしレコードセレクタが表示されていないようなら、フォームのプロパティシートを開いて、
 『書式』タブの『レコードセレクタ』の設定値を「はい」にして下さい)

他には、
 ・フォーム自体を入力専用にする
 (フォームのプロパティシートの『データ』タブで『データ入力用』を「はい」に設定:
  既存のレコードは表示されなくなります)
 ・レコード移動用のコマンドボタンを設置する
 (フォームをデザインビューで開き、ツールボックス(矢印や、新規のテキストボックス等を
  設置する際に使用するツールバー)の左から二番目にあるウィザードボタンが押された
  状態にして、新規コマンドボタンを設置すると、簡単に作れると思います)
といった方法があります。

データを追加する場合は、新規レコードに移動(=新規レコードを選択)する必要があります。

最も簡単なのは・・・
そのフォームの最下方に、レコードセレクタ(『レコード: [|<][<][   1][>][>|][*]/1』といった
感じの部分)が表示されていたら、そこで『[*]』のボタンを押すと、新規レコードに移動できます。
(もしレコードセレクタが表示されていないようなら、フォームのプロパティシートを開いて、
 『書式』タブの『レコードセレクタ』の設定値を「はい」にして下さい)

他には、
 ・フォー...続きを読む

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む


人気Q&Aランキング

おすすめ情報