- 締切済み
エクセル 関数
エクセルで社員の現在の年齢を出し、それを元に部署ごとの平均年齢を出す為の関数式を作っています。 初心者の為、なかなか難しくて出来ません。 どのたか助けて頂けませんでしょうか?
- みんなの回答 (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 は全部署の平均年齢を示しています。
社員名________部署名___先年月日_____年齢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つの計算式では、それぞれに計算結果が微妙に異なります。 一体、どれが正解かの自信は全くありません。
お礼
ご回答ありがとうございました。 3つの計算式・・・それぞれ、チャレンジして見ます! またよろしくお願い致します。
- mshr1962
- ベストアンサー率39% (7417/18945)
年齢(?歳?ヶ月)は、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ヶ月;;")
お礼
ご回答、ありがとうございました! 関数辞典を見ながら内容を理解出来るように頑張ります。 おかげ様で無事に処理が出来ました。 本当に、ありがとうございました!!!
- yuuyu555
- ベストアンサー率0% (0/0)
年齢を生年月日から出すのであれば↓の式で出ます。 但し、○ヶ月は切り捨てされます =ROUNDDOWN((TODAY()-A1)/365,0) A1は生年月日のセルです
お礼
ありがとうございます。 使ったことの無い関数だったので勉強になりました。 またよろしくお願い致します!!!
- zap35
- ベストアンサー率44% (1383/3079)
まず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画面に戻り、「完了」で部署毎の平均年齢が求められるはずです
お礼
ご回答ありがとうございます! ピッポットテーブル?と言う物を使った事が無いのですがチャレンジしてみます。 関数に関して勉強中なので1つ1つ考えながら、やってみます。 本当に、ありがとうございました。 またよろしくお願い致します。
- bari_saku
- ベストアンサー率17% (1827/10268)
A列1~100部署、B列1~100に年齢が入っているとして、総務課の人の平均年齢を出すなら =SUMIF(A1:A100,"総務課",B1;B100)/COUNTIF(A1:A100,"総務課")
お礼
ご回答ありがとうございました。 IFって、いろいろ使えるんですね。初心者なので関数辞典を片手に悩んでました。 またよろしくお願い致します。
お礼
ご回答、有難うございます! ピッポットテーブルって、使った事が無いので、実はよく解らないのですが、早速チャレンジしてみます。 またよろしくお願い致します。