• ベストアンサー
  • 困ってます

Access関数: なぜ日付を指定するとき""で囲むのか?

Accessの関数でdatediff関数というのがありますが、それを使う時に Datediff("yyyy",,)などと入力しますが、なぜDatediff関数では年、月などの表示形式を""でくくるのでしょうか? ""は文字列を表すのではないのでしょうか? 日付は##で囲まれるのでDatediff(#yyyy#,)ならわかるのですが。 重箱の隅をつつくような質問で申し訳ないのですが、""で囲むことに納得がいきません。 なぜ""で囲むのでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数528
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.5

>Datediff("yyyy",,) の"yyyy"は関数に与える引数で日付を表すものではありません (この引数はテキスト型で与えるという仕様です) >#yyyy# も日付を表すものではありませんよ 日付を表すには #2008/08/25# のように中が日付文字列でなければだめです DateDiffでも日付を取る第2,3引数には下のように日付を与えます DateDiff("yyyy",#1900/1/1#,Date())

共感・感謝の気持ちを伝えよう!

質問者からのお礼

引数をテキスト型で与えて結果を数値で返すという使用なのですね。 理解できました。 ありがとうございました。

関連するQ&A

  • EXCELの関数でこんな事できますか?

    表示形式が日付で入力されていて、たとえばあるセルに2012年6月29日の形式で入力されている場合隣のセルに2012/6と自動的に月までの表示に文字列形式で入力する関数、あるいは関数の組み合わせがあれば教えていただきたいのですが。      2012年6月29日→2012/6          日付形式    文字列   

  • ACCESSでの日付抽出を教えて下さい

    Accessで日付を管理しているのですが、「yyyy/m/d h:mm」の形式から月ごとに抽出したいと考えています。テーブルで年と月と日付を別々に組めば抽出できるのですが、全て一括した形式での抽出はできるのでしょうか。

  • 関数を使って日付を文字列にするには?

    A1セルに「2013/12/17」と入力して 書式設定を「yyyy"年"m"月"d"日";@」にしました。 なので、「2013年12月17日」と表示されています。 B1に文字列として「2013年12月17日」を表示させたいのですが、 =TEXT(A1,"@") とすると、41625になってしまいます。 セルに直接入れるなら、「'2013年12月17日」と同じようにしたいのですが それは関数では不可能でしょうか? ="'"&A1 としても、「'41625」になってしまいます。

その他の回答 (5)

  • 回答No.6
  • imogasi
  • ベストアンサー率27% (4619/16513)

>Datediff関数の結果は「26」など数値で表示されますね? なのでなぜ文字列で指定するのかわからないです. (#1のお礼) 関数の戻り値のデータタイプと引数のデータタイプと同一に論じることはおかしい。。 質問の件も、関数のお約束なので、議論しても、実効性は無い。 関数の処理を作る開発者の決め次第、受けとりから次第と思う。 私の感じる例(それぞれ深い意味があって、知らないだけかも判らないが) エクセルでもSUMIFの第2引数は >60 でよいと思うが =SUMIF(D1:D5,"=>60",D3:D5) と書かせるような例があって、個人的にはなくてもよかろうと思う。 Rangeでもエクセル関数はほとんどセル範囲を D1:D3のように入力するが、VBAではRange("D1:D3") である。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

たいへんよくわかりました。 ありがとうございました。

  • 回答No.4
  • mshr1962
  • ベストアンサー率39% (7417/18947)

#2の方のが正解です。 Datediff関数の始めの引数は時間間隔を表すだけの文字列です。 日付を表す数値ではないので日付表示の##で囲むことはしません。 ちなみにEXCELで使えるDATEDIF関数(LOTUS1-2-3との互換関数)でも =DATEDIF(A1,B1,"y") のように時間間隔の引数は""で囲みます。 どうしても納得できないならテキスト形式の変数を使ってください。 詳細は下記を参照 http://www.accessclub.jp/supbeg/042.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

よくわかりました。 ありがとうございました。

  • 回答No.3

元々、Basicに日付に関する定数の書き方が無いから 例えば A = 2008/08/25 と記述した場合 VBAでは型の自動変換があるので 2008÷08÷25 の結果をAに代入する事になる また、#は数値を表す意味で使われてますから##で囲むは紛らわしい なので日付を定数で書く場合は文字列として記述するようになったと思われます。 AccessのSQLなど新しい物はその辺の考慮がされている為かも (こっちのケースがまだ少ない) 同じDBでも昔からあるものはやはり文字列で型変換して代入する方法をとっている物があります。 進化の過程にあるものに関し使えないから可笑しいと言ってあげるのはかわいそうです。 別に文字列でも問題にならないでしょうから。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

よくわかりました。 ありがとうございました。

  • 回答No.2
noname#140971
noname#140971

表示形式ですから、日付は##で囲まれる云々は見当違い。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1

>""で囲むことに納得がいきません。 文字列として指定しないといけないからです。 多言語も含めて、一般的には#で区切る方が変なのです。 検索やフィルタ・SQLでは、日付型フィールド専用の指定で特殊な指定方法になります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 Datediff関数の結果は「26」など数値で表示されますね? なのでなぜ文字列で指定するのかわからないです。

関連するQ&A

  • 日付を抜き出したい

    画像のようにA2~A3に文字列で日付が入力されています。 B2:C3に日付形式でA2に入力されている日付を”ー"で分けて西暦をつけて表示したいと考えています。 D2には開始日の日付の前日の日付を表示したいと考えています 年が変わった場合には翌年の日付を表示するにはどのような式を入力すればいいでしょうか。

  • ACCESS97で現在の日付から勤続年月数を算出する関数

    ACCESS97で社員名簿を作っています。 現在の日付から年齢を算出する関数は調べたところ次のようにすればよいとわかりました。 IIf(Right(Format([生年月日],"yyyy/mm/dd"),5)>Right(Format(Now(),"yyyy/mm/dd"),5),DateDiff("yyyy",[生年月日],Now())-1,DateDiff("yyyy",[生年月日],Now())) 次は現在日から入社年月日フィールドにあるデータを使い、勤続年数○年○ヶ月というクエリーを作りたいのですが、○ヶ月を算出する応用がわからずに困っております。 どうかよろしくお願いします。

  • エクセルの日付

    エクセルの日付についてご教示ください。 現金出納帳の日付蘭(文字列)に◯月◯日とだけ入力されています。同じ年の1月から12月まで、1,000行ぐらいです。 これを◯◯◯◯/◯◯/◯◯という形式に加工したいのですが、どうすればいいでしょうか?

  • アクセスで日付の書式が書き直されます。

    Access97での書式で日付についてお尋ねします。 テキストボックスの書式で、 yyyy\年mm\月d\週 と入力すると、強制的に yyyy"年"mm"月"d"週" となってしまい、表示も本来 2007年08月1週 となるところ、 2007mm月d週 と成ってしまいます。 このファイルをAccess2002で開くと、 yyyy\年mm\月d\週 のままです。 Access97の設定に寄るもではないかと思うのですが、分かりません。 どなたか、ご存じの方がいらっしゃれば、ご教授の程、お願いいたします。

  • 日付で判定する処理

    あまりよくわかっていないので恐縮ですが,掲示板のような処理で入力は日付と文章のみです. 入力の文字列の日付は,今日だと「2005/02/14」と入れ,文章は「こんにちは」としたとするとこの2つがテキストファイルに「,カンマ区切りで」書き込まれます.それをhtmlで表示させているようです. やりたい処理は1週間前の日付だったら文章の文字列を赤色で表示するということをしたいのです. 比較結果で赤文字列にする処理はわかったのですが判定の部分で悩んでおります. 判定する際,思いついたのが入力してある文字列がたとえば「2005/02/14」の形式なのでこの値と今日の日付とを比較して7日前だったら文章を赤文字にしたいのですが,普通はどのような比較をするのでしょうか? 私が考えたのは,ファイルに書き込まれている「2005/02/14」を読み込み「/」をなくして「20050214」にし数字形式にすることで,今日の日付も,「20050214」の形式として7日を引けば負の時は何もせず正の時は文章を赤文字で表示させればと考えたのですが,ファイルから読み込んだ「2005/02/14」から「/」を無くす方法や今日の日付を取得した結果は文字列の形式みたいなので計算にはつかえないようです. 実はもっと簡単な方法があるのではないかと悩んでいたりしています.どなたかご教授お願いいたします.

    • ベストアンサー
    • Perl
  • エクセルでの日付表示について

    エクセル(2010)で日付の表示変更の方法についてお尋ねします。 以下の仕様の日付データがあります。 [07/02/12 09:43:00 午後]   月/日/年 時間 午前or午後 ※区切りは半角スペース これを [12/07/02 21:43:00]  年/月/日 時間(24時間表示) に変更したいと思っています。 単純に”午後”の文字列を削除すると [2007/02/12 09:43:00] となり、月/日/年の順番が間違って表示されます。 セルの表示形式のどの仕様を選択しても同じ結果でした。 文字列の削除後、日付が希望通りに変更する方法を教えていただけますでしょうか。 (24時間表示はこだわりません) よろしくお願いいたします。

  • Oracleに日付や時刻のリテラルはないのか

    Webで色々検索しているのですが、なかなか「これだ!」という情報に当たらず、お教えいただきたく存じます。 OracleのSQLで、日付や時間を表現するリテラルは存在しないのでしょうか? 必ず to_date(文字列, 'YYYY/MM/DD') と言うように文字列表現と関数の組み合わせでなければならないのでしょうか? to_date(文字列, 表現形式)とto_timestamp(文字列, 表現形式)を見つけたのですが、to_time(文字列, 表現形式)というのが見当たりませんでした。to_time関数は存在しないのでしょうか オラクルのSQLはバージョンによって微妙に違う、というような記述を過去ログに見つけたのですが、8と9について情報をお願いします。

  • 文字列を日付へ

    エクセルで「04/03/2003」という文字列が入ったセルがあります。 これを日付形式に変更したいのですが、簡単な方法はありませんか? セルの表示形式のユーザー定義で「mm/dd/yyyy」としても変わりませんでした。。 何かやり方が間違えているのでしょうか??? よろしくお願いしますm(__)m

  • VBAでの日付の置換方法を教えてください

    Excel2007のVBAにて日付の置換ができなく困っております。 対象の複数列に入力されている下記の様なデータの内、日付の"yyyy/m/d"を "yyyy年m月d日"に置換しなくてはなりません。 ※書式設定ではなく、文字列として変換 入力例 1)2011/12/13 2)2011/12/1~2011/12/13 3)2011年12月13日 4)2011/12/1~2011/12/13の毎火曜 ヒントでも構いませんので、宜しくお願い致します。

  • エクセルの日付機能

    エクセルの日付機能に関する質問です。 あるワークシートのA列に日、B列に月、C列に年が入力されています。これらの日付を行ごとに結合して、D列にdd/mm/yyという形式で表示させたいと考えています。 先ほど、D2に[=A2&"/"&B2&"/"&C2]という計算式を入力し、D列を右クリックして[セルの書式設定]→[表示設定]→[ユーザー定義]で[種類]欄に[dd/mm/yy]と入力しましたが、D2は日付として認識されず、ただの文字列として認識されているようです。 統合された文字列が日付として認識される良い方法を教えていただけないでしょうか?よろしくお願いします。