アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルで社員の現在の年齢を出し、それを元に部署ごとの平均年齢を出す為の関数式を作っています。
初心者の為、なかなか難しくて出来ません。
どのたか助けて頂けませんでしょうか?

A 回答 (6件)

既出ですが、ピボットテーブル(ピボテ)に依るのが最も簡単かと。


ここでは、ピボテの結果例(範囲 F3:G8)と、その元としたデータベース(社員情報)例だけを示しておきます。

   A      B      C    D  E   F    G
1  部署  社員名     生年月日 年齢
2  総務部 清原 和博   67/08/18  40
3  総務部 小野寺 麻衣  75/11/09  31   平均/年齢
4  総務部 岡田 武史   56/08/25  51   部署    合計
5  総務部 稲垣 吾郎   73/12/08  33   財務部   48.8
6  総務部 伊藤 蘭    55/01/13  52   人事部   40.8
7  人事部 今井 美樹   64/04/14  43   総務部   41.4
8  人事部 梅宮 アンナ  72/08/20  35   総計    43.1
9  人事部 小倉 優子   83/11/01  23
10 人事部 賀来 千香子  61/10/17  45
11 人事部 東 ちづる   60/06/05  47
12 人事部 明石家 さんま 55/07/01  52
13 財務部 落合 博満   53/12/09  53
14 財務部 大仁田 厚   57/10/25  49
15 財務部 有森 也実   67/12/10  39
16 財務部 稲垣 潤一   53/07/09  54

D2: =DATEDIF(C2,TODAY(),"Y")

[合計]が該当部署の平均年齢で、「総計」の 43.1 は全部署の平均年齢を示しています。
    • good
    • 0
この回答へのお礼

ご回答、有難うございます!
ピッポットテーブルって、使った事が無いので、実はよく解らないのですが、早速チャレンジしてみます。
またよろしくお願い致します。

お礼日時:2007/09/15 10:26

社員名________部署名___先年月日_____年齢1___年齢2___年齢3___現在


鈴木_一郎____総務______2004/2/29________0__________1_________1___2005/2/28 <--- 不一致
田中_子_______総務______2004/3/1__________0_________0_________0___2005/2/28
木下_純_______営業______2004/2/28_________1_________1_________1___2005/2/28
鈴木_一郎____総務______2003/2/28_________1_________1_________1___2004/2/28
田中_良子____総務______2003/2/28_________1_________1_________1___2004/2/29
木下_純_______営業______2003/2/28_________0_________0_________1___2004/2/27 <--- 不一致


年齢1=DATEDIF(C2,G2,"Y")
年齢2=ROUNDDOWN((G2-C2)/365,0)
年齢3=GetAge(C2,G2)

Public Function GetAge(ByVal Birthday As Date, ByVal Hiduke As Date) As Integer
  GetAge = DateDiff("yyyy", Birthday, Hiduke) + (Format(Birthday - 1, "mm/dd") > Format(Hiduke, "mm/dd"))
End Function

3つの計算式では、それぞれに計算結果が微妙に異なります。
一体、どれが正解かの自信は全くありません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
3つの計算式・・・それぞれ、チャレンジして見ます!
またよろしくお願い致します。

お礼日時:2007/09/15 10:25

年齢(?歳?ヶ月)は、A1が誕生日なら


=TEXT(DATEDIF(A1,TODAY(),"Y"),"0歳;;")&TEXT(DATEDIF(A1,TODAY(),"YM"),"0ヶ月;;")

年齢の平均は
=TEXT(DATEDIF(AVERAGE(A1:A100),TODAY(),"Y"),"0歳;;")&TEXT(DATEDIF(AVERAGE(A1:A100),TODAY(),"YM"),"0ヶ月;;")

部署がバラバラになっている場合は
月数=DATEDIF(SUMIF(B1:B100,"部署名",A1:A100)/COUNTIF(B1:B100,"部署名"),TODAY(),"M")
平均年齢=TEXT(INT(月数/12),"0歳;;")&TEXT(MOD(月数,12),"0ヶ月;;")
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました!
関数辞典を見ながら内容を理解出来るように頑張ります。
おかげ様で無事に処理が出来ました。
本当に、ありがとうございました!!!

お礼日時:2007/09/14 15:25

年齢を生年月日から出すのであれば↓の式で出ます。


但し、○ヶ月は切り捨てされます
=ROUNDDOWN((TODAY()-A1)/365,0)

A1は生年月日のセルです
    • good
    • 0
この回答へのお礼

ありがとうございます。
使ったことの無い関数だったので勉強になりました。
またよろしくお願い致します!!!

お礼日時:2007/09/14 15:26

まずDATEDIF関数で各社員の満年齢を求めて、ピボットテーブルで部署毎の平均を求めるのが良いでしょう



仮にA列に部署、B列に氏名、C列に生年月日があるとしましょう。
1行目はタイトル行(タイトル行はピボットテーブルを使用するときに必須)で、2行目から下がデータ行になります。

D2(一番目の社員の行)に
 =DATEDIF(C2,TODAY(),"Y")
と入力して、下方向にコピーします。これが本日時点の満年齢です。

次に部署ごとの平均年齢を出すために、1行目のタイトル行から一番下の社員の行のA列~D列の全てを選択します

「データ」→「ピボットテーブルとピボットグラフレポート」を選択しウィザードを開きます。
1/3画面は何も変更せず「次へ」を選択します。2/3画面ではデータ範囲を選択しますが、先に範囲を選択しているので、ここも何も変更せず「次へ」を選んでください

3/3画面で「レイアウト」ボタンをクリックします。するとレイアウト画面が開きますから、画面右側にある「部署」ボタンを「行(R)」の位置にドラッグします。「部署」の実際の名称はシートの1行目に入力したタイトル名がそのまま表示されます。

次に「満年齢」を「データ(D)」の位置にドラッグすると「データの個数/満年齢」と表示が変わります。そのボタンをダブルクリックすると計算方法が「合計」「平均」…などたくさん表示されますから、「平均」を選択してください

「OK」で3/3画面に戻り、「完了」で部署毎の平均年齢が求められるはずです
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
ピッポットテーブル?と言う物を使った事が無いのですがチャレンジしてみます。
関数に関して勉強中なので1つ1つ考えながら、やってみます。
本当に、ありがとうございました。
またよろしくお願い致します。

お礼日時:2007/09/14 15:30

A列1~100部署、B列1~100に年齢が入っているとして、総務課の人の平均年齢を出すなら



=SUMIF(A1:A100,"総務課",B1;B100)/COUNTIF(A1:A100,"総務課")
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
IFって、いろいろ使えるんですね。初心者なので関数辞典を片手に悩んでました。
またよろしくお願い致します。

お礼日時:2007/09/14 15:28

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