ACCESS97で社員名簿を作っています。

現在の日付から年齢を算出する関数は調べたところ次のようにすればよいとわかりました。
IIf(Right(Format([生年月日],"yyyy/mm/dd"),5)>Right(Format(Now(),"yyyy/mm/dd"),5),DateDiff("yyyy",[生年月日],Now())-1,DateDiff("yyyy",[生年月日],Now()))

次は現在日から入社年月日フィールドにあるデータを使い、勤続年数○年○ヶ月というクエリーを作りたいのですが、○ヶ月を算出する応用がわからずに困っております。
どうかよろしくお願いします。

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

A 回答 (3件)

これは、DateDiff関数が、月単位で日付を数えている事に起因する問題ですね。


DateDiff('m',#2001/01/31#,#2001/02/01#)
のようにすると、1が表示されます。
日付的には1日しか違わないのに、月だけに着目するとひと月異なっていると判断されるんですね。

ってことで、「どの時点でひと月と判断するのか」を決めておく必要が出てきます。
1月29日(月末より前)に入社した人を2月28日(月末)には勤続一ヶ月と判断するべきか、とか、細かい事を考え出すときりがないので、とりあえずこんな感じで決めてみます。

入社年月日の日の部分とと、現在の年月日の日の部分とを比較してみて、現在の日のほうが大きかったら、既にひと月経過したとみなす。

これを#2の式と組み合わせると、以下のようになります。

IIf(Day(Date())>=Day([入社年月日]),DateDiff('m',[入社年月日],Date())\12 & '年' & DateDiff('m',[入社年月日],Date()) Mod 12 & 'ヶ月',(DateDiff('m',[入社年月日],Date())-1)\12 & '年' & (DateDiff('m',[入社年月日],Date())-1) Mod 12 & 'ヶ月')

なんか、すごい長い式になっちゃいましたが、これで上記のような仕様を満たしているはずです。
    • good
    • 1
この回答へのお礼

ありがとうございます!
これぞ求めた結果でした!
Accessはよく使うのですが関数は一般的なことしか知らず、自分で応用をきかせようにも発想することもできずにいましたので本当に助かりました。何回も補足になってすみませんでした。

お礼日時:2001/01/05 15:56

うーん… それなら、



DateDiff('m',[入社年月日],Date()) \ 12 & '年' & DateDiff('m',[入社年月日],Date()) Mod 12 & 'か月'

のようにしても駄目でしょうか?

これでも駄目なら、
DateDiff('m',[入社年月日],Date())
とだけ、クエリのフィールドの部分に入力してみて、それらしき数字が出るかどうか確認してみてください。(3年2ヶ月なら、38(36+2ヶ月)と表示されるはず。)

もしうまくいかなければ、補足してください!

この回答への補足

回答ありがとうございます。
うまくいきました!上の方法でうまくいったんですけど、勤続2週間の社員が勤続0年1ヶ月のように月未満の分も繰り上げられてしまうのですがよい方法はありませんか?
たびたびすみませんがご存知でしたらお願いします。

補足日時:2001/01/05 10:51
    • good
    • 0

日付の差異を求める関数は、DateDiffです。



datediff("yyyy",[入社年月日],date) & "年" & datediff("m",[入社年月日],date) mod 12 & "ヶ月"

ってな感じで記述すればいいでしょう。

mod 演算子は、割り算の余りを計算します。

この回答への補足

回答ありがとうございます。
教えていただいたとおりやってみたのですがうまく結果が出ません。
入社年月日フィールドのデータは西暦でyy/mm/ddで入力してあるのですが、データのない社員の分は「年ヶ月」という文字だけが返り、データを入力してある社員の分は「#Error」が返ります。

補足日時:2001/01/04 16:49
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

Q「yyyy/mm/dd hh:mm」が「yyyy/mm/dd hh:nn」へ変化する

access2003を使用しています。
時刻の「分」の表示形式で気になることがあるのですが
テーブルのデザインで
フィールド1のデータ型を「日付/時刻型」にし
書式を「yyyy/mm/dd hh:mm」と入力しても
「yyyy/mm/dd hh:nn」に変化してしまいます。

問題なく「2009/02/28 20:33」と表示されるのですが
なぜmからnへ変化してしまうのでしょうか?

また
デザインで書式を「hh:mm」だけ入力した場合は
「時刻 (S)」へ変化します。

何か少しでもわかる方ご回答よろしくお願いします。

Aベストアンサー

分表示は、nn ですね。
mm は月表示のようです。
hh:mm はエラー扱いされて、おせっかい機能で hh:nn 扱いされたのかも。
詳細は分かりません。

Q「今日の日付を含む」と言う条件のクエリ(yyyy/mm/dd hh:mm形式)

テーブル1の
日付フィールドには「yyyy/mm/dd hh:mm」形式にしているため
「2009/02/28 0:30」と入力されています。

クエリ1に
SELECT テーブル1.日付
FROM テーブル1
WHERE (((テーブル1.日付)=Date()));
とした場合は
「2009/02/28 0:30」
は表示されません。

テーブル1の
「2009/02/28 0:30」を「2009/02/28 0:00」にすれば
クエリ1を実行すると「2009/02/28 0:00」のレコードが表示されます。

どうすれば日付+時間の場合も日付で抽出することができるのでしょうか?
アクセス2003です。
よろしくお願いします。

Aベストアンサー

> WHERE ((テーブル1.日付)=Date())
部分を

WHERE (Format(テーブル1.日付,"yyyymmdd")=Format(Date(),"yyyymmdd"))
とし、時間を省いた部分で比較して見たらいかがですか。

Qyyyy/mm/ddの日付に一括変換するマクロ

[セルの書式設定] の [表示形式]が標準(日付ではない)で単なる文字列となっている「mm-dd-yyyy」や「mm/dd/yyyy」のデータをマクロで「yyyy/mm/dd」の日付データに一括変換するマクロを教えてください。

たとえば、日付データが列Aにある場合にはDATE関数で、
=DATE(RIGHT(A2,4),LEFT(A2,2),MID(A2,4,2))
でも変換可能ですが、対象ファイルが多数、各ファイルにも対象の列が多数、そしてファイルの更新頻度も多いため、DATE関数を使用することは現実的ではない事情があります。
このためマクロを使用して処理させたいです。

添付のサンプルの例で一括変更するマクロを教えてください。
なお、Excelは2007を使用しています。

Aベストアンサー

マクロといっても日付のデータであることをいちいち判断することも容易ではありません。
むしろ日付に変化したいセルの範囲を選んでから「区切り位置」の機能を使って変換してはどうでしょう。
例えばA1セルからA100セルにデータがあるとしたらそれらの範囲を選択したのちに「ホーム」タブの「データ」から「区切り位置」をクリックします。
表示の画面でウィザードの1/3画面、2/3の画面で「次へ」をクリックして最後の画面では列のデータ形式の項で「日付」にチェックを付けたのちに右の窓では MDY を選択してから「完了」ボタンをクリックします。

QACCESS97でyyyy/mm/ddで入力しているものを月別で集計する方法

access97でyyyy/mm/ddで入力しているデータがあります。これを月別(横軸)に客先別(縦軸)で
表を作りたいのですが、このままでは年月日毎に
データが出来上がってしまいます。
初心者の私ですが、データを有効に使いたいので
宜しくご教示の程お願いします。

Aベストアンサー

月(年は無視)なら#1の方のいわれるように、新規作成からクロス集計ウィザードで
客先別に日付の項目を月で行うのが早いですね。
年月で集計を行う場合は
Format([日付],"m月") → Format([日付],"yy年mm月")
での集計に変えてください。

Qアクセスクエリ関数 「Format」「Format$」の違い

テーブルの「日付」フィールド(日付型)には
「2009/5/20」とデータが入っていて、
クエリのSQL文を
SELECT Format([テーブル]![日付],"yy/mm/dd") AS フォーマット,
TypeName([フォーマット]) AS フォーマットのデータ型,
Format$([テーブル]![日付],"yy/mm/dd") AS [フォーマット$],
TypeName([フォーマット$]) AS [フォーマット$のデータ型]
FROM テーブル;

とした結果どちらも
「09/05/20」「String型」で結果は同じです。
「Format」「Format$」は何が違うのでしょう?

宜しくお願い致します。

Aベストアンサー

質問者さまの考えてる通り、同じものじゃないでしょうか?
単純に、$が付く関数は、文字列を返す関数と言う表記です

例えば、
Mid関数とMid$関数
Left関数とLeft$関数
Right関数とRight$関数
関数自体が、文字列を返す場合、意味を成してません

それと違って、
Date関数とDate$関数
の場合、返す値のデータの型が違います

こう言う区切り訳をしているだけの表記です
しかし、当方のAcc2002では、$付き関数は、使用可能でも、ヘルプが出ないところを見ると、下位互換のために残された関数だと思いますよ


このカテゴリの人気Q&Aランキング

おすすめ情報