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

今回は日付型のエラーについて質問があります。
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と関連する良く見られている質問

Qエクセルで種類を数える関数が無いのは何故?

エクセルで種類を数える関数が無いのは何故なんでしょうか?

エクセルで種類を数えるには、いくつかの関数を組み合わせるのが一般的ですよね?
直接数える関数が無いのは、訳があるんでしょうか?

Aベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

QAccess テキスト型を日付/時刻型へ変更

いつもお世話になっております。
Accessについてお願い致します。
テーブル「メインデータ」に日付と時刻が一緒になっているデータがあります。例:2004/01/01/ 10:00
現在、
フィールド名:受付時間
データ型:テキスト型
フィールドサイズ:12
定数入力:0000/00/00\ 00:00;0;_
と設定してあり、問題はこのデータをテキスト型から日付/時刻型「「yyyy/mm/dd @@:@@」)へ変更したいのですが、
テキスト型→日付/時刻型へ変更すればデータが消えてしまいます。
そこで、クエリでFormatを使ったのですがエラーが出てしまいます。
何か良い案はございませんでしょうか?
宜しくお願い致します。

Aベストアンサー

1)新しくフィールド(仮に「受付時間2」とするを追加し、書式を「日付/時刻型」にし、その他の項目も設定する。
2)データシートビュー表示で「受付時間」の列を選択し、新しく設定した「受付時間2」の列に貼り付ける。
3)デザインビューで「受付時間」を削除し、「受付時間2」を「受付時間」に変更する。
※フォーム、クエリなどのリンクは、再設定する必要が有るかもしれません。
※適当なテーブルをつくってテストしてみて下さい。
※バックアップもしておくと良いと思います。

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

Q日付型と文字列型、両方にフィルタをするには

アクセス フォームで日付型(Between and)と文字列型、両方にフィルタをするには?


Private Sub cmd_ボタン1_Click()

Me.Form.Filter = _
"日付 Between #" & Me.cmb_日付1.Value & "# And #" & Me.cmb_日付2.Value & "#" & _
" and 会社名 like " & "*" & Me.cmb_会社名.Value & "*"

Me.Form.FilterOn = True

End Sub

これのどこが変なのか教えていただけますか?
実行時エラー3075「クエリ式の構文エラー:演算子がありません。」というエラーになります。

Aベストアンサー

日付
Me.cmb_日付1.Value
Me.cmb_日付2.Value
Me.cmb_会社名.Value
の型・値は何でしょう?


"format(日付, "YYYY/MM/DD") Between '" & Me.cmb_日付1.Value & "' And '" & Me.cmb_日付2.Value & "'" & _
" and 会社名 like " & "*" & Me.cmb_会社名.Value & "*"
だとどうなります?

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

QOfficeアクセス テーブル「テキスト型」⇒「日付型」への変換について

テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。

※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。

テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

Aベストアンサー

テーブルに日付時刻型フィールドを追加して、
更新クエリを使って、#1さんが提案されている
数式を使えばよいのでは?

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

Q日付型のテキストボックスに数値を入れて日付にしたい

アクセスのフォームの上にテキストボックスがあり、
書式はyyyy/mm/dd(aaa)になっています。

日付型の値を入力した際は問題ないのですが
例えば、20130720と入力したら、

このフィールドに入力した値が正しくありません。
例えば、数値型のフィールドに文字列を入力しました。

となります。

なので、

Private Sub 日付_BeforeUpdate(Cancel As Integer)

If Len(Me.ActiveControl.Value) = 8 Then
Me.ActiveControl.Value = Format(Me.ActiveControl.Value, "yyyy/mm/dd")
End If

End Sub

としてみたのですが、

更新前処理イベントが発動する前に、

「このフィールドに入力した値が正しくありません。
例えば、数値型のフィールドに文字列を入力しました。」

のエラーが出てしまうようです。

20130720の形の日付を入れても自動で日付型に変換するの方法はありますか?

Aベストアンサー

>更新前処理イベントが発動する前に、
このAccess君のチェックをかい潜るすべは知りません。

コントロールのデータタブ→定型入力に、0000/00/00;0;_
書式が自動的に変わってしまうので再度、yyyy/mm/dd(aaa)
にもどす。
で近いことは出来ます。
参考になりそうなところ
http://hatenachips.blog34.fc2.com/blog-entry-304.html?cat-2

もしくは、更新前処理ではなく変更時イベントで
Private Sub 日付_Change()
If Len(Me.ActiveControl.Text) = 8 And IsDate(Format(Me.ActiveControl.Text, "0000/00/00")) Then
Me.ActiveControl.Value = CDate(Format(Me.ActiveControl.Text, "0000/00/00"))
End If
End Sub
とかでも?

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

QAccess2000テーブルでのデータ型(日付/時刻型)

とても初歩的な質問で申し訳ありません。
データの入力を"○○年××月"という形にしたいのですが、
日付/時刻型にしてしまうとテーブルでの表示が”○○年××月01日”になってしまいます。
のちのち、計算をして”○○年×ヶ月”というようにしたいので、
日付/時刻型にした方がいいと思っているのですが・・・。
どうしたらよいか、どなたかいいアドバイスをお願い致します。

Aベストアンサー

私ならそのフィールドを「テキスト型」または「数値型」の6桁で作成します。
のちのち計算する場合も、Datediff関数で、不足している1日を追加することによって計算できます。
あと、別の用途として、年度変換テーブルを用意することによって、
年度、半期、四半期ごとなどに集計することも容易になるからです。

御参考まで。


人気Q&Aランキング

おすすめ情報