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&Aを見た人が検索しているワード

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

QAccessのクエリ。日付と顧客で売上合計をだす。

期間を指定して、顧客の売上を合計したいです。

2つのテーブルからクエリを作成しました。

tbl顧客
顧客番号
顧客名

tbl販売
販売番号
日付
顧客番号
金額

Q_売上
日付
顧客番号
顧客名
金額

∑をクリックして、金額の集計は[合計]にしています。
その他は、[グループ化]です。

日付の抽出条件は、
Between [開始] And [終了]
としています。

顧客毎に合計を出したいです。
よろしくお願い致します。

Aベストアンサー

日付の集計をグループ化ではなく、Where 条件にすれば
よろしいかと。

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エクセルで日付が入力されたセルの隣のセルの金額を合計するにはどうするのでしょうか。

A1、C1、E1セルにはユーザー定義(d”日”)で数字を入れると日付になります。
各、隣セルB1、D1、F1には金額が入力されています。
G1には合計が入るようになっています。
例えば、A1とE1に日付が入力された時、B1とF1の合計がG1に。
その後、C1に日付が入力されたらG1がB1、D1、F1の合計になるようにしたいです。
よろしくお願いします。

Aベストアンサー

こんばんは!
横からお邪魔します。

G1セルに
=SUM((A1>0)*B1,(C1>0)*D1,(E1>0)*F1)
ではどうでしょうか?m(_ _)m

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"))
とし、時間を省いた部分で比較して見たらいかがですか。

Q抽出結果で、合計と最新日付を得るには?

----A-----B-----C---
1 07/01 商品A 1,000
2 07/02 商品A 2,000
3 07/02 商品B 3,000
4 07/03 商品A 4,000
---------------------
のように、日付・品名・金額の列があり、
「商品A」の合計金額と、その合計した明細の最新日付を
出したいのですが、どうすればいいのでしょうか?

Aベストアンサー

合計は、
=SUMIF(B1:B4,"商品A",C1:C4)

最新日付は、
=MAX(IF(B1:B4="商品A",A1:A4))
と入力してから、CtrlキーとShiftキーを押しながらEnter

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 を選択してから「完了」ボタンをクリックします。

Q日付をキーにその日付から前と後をそれぞれ金額を合計する方法が知りたいで

日付をキーにその日付から前と後をそれぞれ金額を合計する方法が知りたいです。
SUMIFかSUMPRODUCTあたりの関数を使えばいいかなと思うのですが、いい方法が思いつきません。
よろしくお願いいたします。

Aベストアンサー

ちょっと、完璧にイメージできてないですが画像の上部にある日付の右にその日付未満(以下)と以上(それより新しい日付)の合計でいいんでしょうか?

日付をシリアル値と思えばSUMIFで条件式に不等式を入れれば可能です。

A1に軸となる日付が入ると仮定して

軸となる日付以前の日付
=SUMIF(日付データのある範囲,"<="&a1,金額のある範囲)

軸となる日付以降の日付
=SUMIF(日付データのある範囲,">"&a1,金額のある範囲)

どちらに軸となる日付を入れるかは不等号の=をどちらに入れるかです。

SUMPRODUCTでも出来ると思うけど、重くなりそうなので省略します。
きっと、別の方が答えてくれるでしょう。

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

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

Aベストアンサー

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

Qエクセル 最新日付以外のデータを合計する

下表があるとしまして、
氏名日付買上金額
鈴木5月5日10
鈴木5月6日60
鈴木5月7日100
鈴木5月9日400
田中5月4日100
田中5月7日200
山田5月1日600
山田5月2日200
山田5月3日300
1970
氏名毎に、最新日付以外の合計を計算したいのです。
この場合、鈴木さんが170 田中さんが100 山田さんが800の合計1070がそれぞれの氏名の最新以外データの合計となりますが、これらを自動的に計算できないでしょうか?
よろしくおねがいします。

Aベストアンサー

こんにちは。

以下の方法でできます。
大きく分けて2ステップです。
データはあらかじめ日付順でソートされているものとします。


1)作業列を作る

最新データの場合のみ買上金額にかかわらず0を返し、
それ以外の場合は買上金額そのままを返す式を、
別な列に入力します。

たとえば例で言えばA~C列に氏名、日付、買上金額ですので、
D列を作業列としましょう。
D1セルに「買上金額2」などと見出しをつけてください。

D2セルに次の式を入力します。
 =IF(A2=A3,C2,0)
そしてこの式をすべての行にコピーします。
すると、最新データの行のみ、0となり、
それ以外の行は、買上金額が表示されます。


2)集計機能で名寄せして集計する

下準備ができたらいよいよ集計です。
リスト内にカーソルを置いた状態で、

 データ-集計

で、集計の設定画面が開きます。
ここで、
 「グループの基準」 を 「氏名」
 「集計の方法」 を 「合計」
を指定します。

そして、
 「集計するフィールド」では、
 「買上金額2」のフィールドにのみ、
チェックがつくようにします。

そして、OKを押せば自動的に集計されます。

こんにちは。

以下の方法でできます。
大きく分けて2ステップです。
データはあらかじめ日付順でソートされているものとします。


1)作業列を作る

最新データの場合のみ買上金額にかかわらず0を返し、
それ以外の場合は買上金額そのままを返す式を、
別な列に入力します。

たとえば例で言えばA~C列に氏名、日付、買上金額ですので、
D列を作業列としましょう。
D1セルに「買上金額2」などと見出しをつけてください。

D2セルに次の式を入力します。
 =IF(A2=A3,C2,0)
そしてこの式を...続きを読む

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を見た人がよく見るQ&A

人気Q&Aランキング