• 締切済み

Accessで超過年数を自動表示させる関数の構文を教えてください。

Access2003を使用しています。 クエリで出荷日から8年以上経過したレコードには8年超過と自動表示させたいのですが、関数の構文はどのようになるのでしょうか? 「出荷日」フィールドは日付/時刻型になっています。 なお、表示させるフィールドは「超過年数」です。 どなたかご教示をお願いします。

  • 375k
  • お礼率60% (176/289)

みんなの回答

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

出荷日には未来の日付はないものとします 超過年数:DateDiff("yyyy",[出荷日],Date())+(Format([出荷日],"mmdd")>Format(Date(),"mmdd")) & "年経過" 超過じゃなく経過ですよね

375k
質問者

お礼

教えていただいた構文にIIfで条件分岐させて8年を超えたものは全て同一の表示にすることが出来ました。 経過年数: (IIf(DateDiff("yyyy",[出荷日],Date())+(Format([出荷日 ],"mmdd")>Format(Date(),"mmdd"))>=8,"8年経過","")) またご指摘のとおり、経過が適当ですよね。 ありがとうございました。

noname#140971
noname#140971
回答No.1

出荷履歴クエリ: ID__出荷日__________超過年数 01__2000/03/05___8年超過 02__2001/03/05 SELECT 出荷履歴.ID, 出荷履歴.出荷日, IIf(YearDiff([出荷日],Date())>=8,"8年超過","") AS 超過年数 FROM 出荷履歴; もちろん、関数 YearDiff() なんてのは Access にはありません。 そこで、自作して標準モジュールに登録する必要があります。 Public Function YearDiff(ByVal Hiduke1 As Date, ByVal Hiduke2 As Date) As Integer   YearDiff = DateDiff("yyyy", Hiduke1, Hiduke2) + _         (Format(Hiduke1 - 1, "mm/dd") > Format(Hiduke2, "mm/dd")) End Function [イミディエイト] ? YearDiff("2004/2/29", "2005/2/28") 1 問題は、こういう場合の経過年数計算をどうするかです。 これは、そこそこにルールってのがあるので必ずしも YearDiff() が正しいとも限りません。 DateDiff("yyyy", 起算日, 現在日) これで済まして問題なきゃ、それでも良いかも知れません。

375k
質問者

お礼

関数を自作できるなんて凄いですね。 私は、まだまだそのレベルには達成できず・・・です。 ありがとうございました。

関連するQ&A

  • Access datediff関数について

    クエリを使って、社員の定年までの年数を計算したいと 思っています。 datediff関数を使うのかなと思いますが、行き詰ってしまいました。 <テーブルフィルード名> ・氏名 ・今日の日付 ・生年月日 など <クエリ> で定年までの年数を調べたいので、 ・氏名フィールド ・演算式フィールドとして 定年までの年数:([今日の日付],[???],"Y") かなと考えています。???の部分も式が分からないのですが 教えて頂けないでしょうか? よろしくお願いいたします。

  • Access2007の経過年数を出す関数を教えてください。

    Access2007でフイールドにフイールド名BEGDATEに「yyyy/mm/dd」が書き込んでありもう一つのフイールドにフイールド名ENDDATEに「yyyy/mm/dd」が記録されています。 この「BEGDATEのyyyy/mm/dd」と「ENDDATEのyyyy/mm/dd」の経過年数、月数、日数をたとえば40年5ヶ月10日だとすれば 40.5.10と表示させるにはこれを表示させるボックスのコントロールソースにどのような関数を書いたらよいのでしょうか。 因みにAccess2003時代は=PASSAWAY([BEGDATE],[ENDDATE])と言う簡単な関数で出来ていましたが今これを使うと#NAME?のエラーになってしまいます。

  • AccessのDateSerial関数

    テーブルの「登録日」というフィールドに記入してある日付から、3年後の日付を表示させるためにフォームでDateSerial関数を使っています。 しかしこの関数を使ってみると、テーブルの「3年後日付」フィールドにはDateSerial関数で計算させた日付が入ってきません。 また、同じ事をクエリでもDateSerial関数を使って行ってみましたが、やはりテーブルには反映されませんでした。 どうすればテーブルに3年後の日付が反映されるようになりますか? かなりAccessの初心者なので変な事を聞いてしまっているかもしれませんが、どうぞアドバイスをよろしくお願い致します。

  • Access 期日が迫った文書を表示させたい

    いつもお世話になっています。 Accessで業務文書のデータを取り扱っています。 テーブルには「提出期日」というフィールドがあり、提出期日の日の3日前以内になったレコードを表示させるクエリを作りたいのです。 クエリに「提出期日」と今日の日付を使って、式を作ればよいと思うのですが、どのように記述すればよいかわかりません教えてください。 テーブルに今日の日付というようなフィールドはありません。 よろしくお願いします

  • Access 2003 日付の表示について

    クエリ作成にて 集計する→日付をグループ化する→月を選択しました。 日付 を月でグループ化: Format$([テーブル1].[日付],'mmmm yyyy') となり、表示が February 2010となります。 これを平成22年 2月と表示したいのですが、mmmm yyyyをggge年 m月と変更すると、クエリ式'(Sumテーブル1.量1)'の構文エラー:演算子がありません。となり変更できません。 テーブル構造は フィールド名  データ型 id オートナンバー 日付      日付/時刻型 機械番号    数値型 材質      テキスト型 量1      数値型 量2      数値型 情報が不足していれば追記いたします。

  • アクセス クエリ DSum関数

    testテーブル 日付     金額 2009/04/30  1 2009/05/01  2 2009/05/02  3 2009/06/30  4 このデータを元にクエリを作成して 4/1~5/30までの合計を新フィールドに表示させたいです。 日付     金額   4,5月合計 2009/04/30  1      6 2009/05/01  2      6 2009/05/02  3      6 2009/06/30  4    (表示なし) としたいのですが 4,5月合計: DSum("[金額] ","test",[日付]>=#2009/04/01# And [日付]<=#2009/05/30#) とすると 日付     金額  4,5月合計 2009/04/30  1     10 2009/05/01  2     10 2009/05/02  3     10 2009/06/30  4   (表示なし) となってしまいます。 「2009/4/1~2009/5/30のレコードに金額の合計を表示させる」のではく、 「2009/4/1~2009/5/30の金額の合計を表示させる」 にはどうすればいいですか? 表示についてはIIF関数で対応できると思っています。 よろしくお願いします。

  • エクセル関数で勤続年数を求めた時の表示

    社員勤続年数を以下のように求めました。 =DATEDIF(A1,TODAY(),"D") 「yy"年"mm"ヵ月"dd"日"」の表示にする。 すると、2年経過した社員など、『1年12ヶ月』と表示されてしまいます。 これを『2年』と表示する方法はないのでしょうか? また、関数自体 =DATEDIF(A1,TODAY()+1,"D") の方が自然なんでしょうか? ご教示ください。よろしくお願いします。

  • ACCESSのクエリフィールドの書式表示

    ACCESS2003を使っています。タイムカードテーブルに「出社時刻」と「退社時刻」の「日付/時刻型」のフィールドがあります。このタイムカードテーブルから「出社時刻」と「退社時刻」フィールドを含むクエリを作り、勤務時間:[退社時刻]-[出社時刻]という計算フィールドを作った場合、勤務時間フィールドのプロパティで「書式」のメニューに「日付」や「時刻」が表示されたりされなかったりします。 これはACCESSのバグでしょうか?必ず表示させることはできないのでしょうか。(書式にところに時刻の形式を書き込めば表示されることは知っています。)

  • Access format関数を使わず日付を変換

    Access2016で、あるテーブルからクエリを作成して日付フィールド(西暦/月/日)を(西暦/年)のようにさせたいのですが、以下のようにformat関数を入力して実行すると完了するまでに非常に長い時間がかかってしまい困っています。 別の方法で処理をしたいのですが、ご存知の方いらっしゃるでしょうか。 SQLとかは使わず、初心者でも後から解読・編集できるような方法があればありがたいです。 元となるテーブルのデータ型は都合上変えられません。 フィールド名 日付 データ型 日付/時刻型 データサンプル 2024/2/27 クエリでやりたいこと 元のテーブルのデータを日別ではなく月別で集計したいため、 日付データを 年/月/日 ではなく 年/月 に変換したい ※同月のデータを同一の値に変換できさえすれば合計できるので、表示される形式は「2024/2」でも「2024年2月」でも「202402」でも構いません。 今回入力した式 「年月:format([日付],"yyyy/mm")」 以上、よろしくお願いします。

  • 秒数表示を日付表示に変更する関数(Access)

    アクセス(2000以降のバージョン)での質問です。 日付表示が1970年1月1日00:00:00(グリニッジ標準時)からの 秒数表示となっているデータがあります。 このデータを「yyyy/mm/dd hh:mm:ss」(日本時間)表記に したいと考えています。 この内容をアクセスのクエリで、 秒数表示をひとつのフィールドに入れた状態で 別のフィールドに書き込める関数はあるでしょうか? できれば複数のフィールドを使わずに、 一つのフィールドのみでできるとありがたいです。 ある場合にはその方法を、 無いけどもこの方法で、というのがありましたら お教えいただけないでしょうか? アクセス自体がまだ不慣れなもので、 説明不足の箇所もあるかもしれませんが、 よろしくお願いいたします。