• 締切済み

マクロで年齢の自動計算

エクセルのA1のセルに生年月日を入力するとB1のセルに年齢が自動入力されるマクロを組みたいのですが教えてください。関数(DATEDIF)を利用してのやりかたはわかるのですがマクロを組んで同じことはできないでしょうか。よろしくお願いいたします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >関数(DATEDIF)を利用してのやりかたはわかるのですが DATEDIF は、Lotus 1-2-3の関数ですから、以下のようにしないとVBAでは求められないはずです。 VBA.DateDiff を使って出来ないことはないのですが、かなりややこしくなるような気がします。 誕生日というのは、今は、満で数えますから、誕生日を過ぎないと、1歳にならないのですね。つまり、2005/11/1 の赤ちゃんは、明日(11/2)にならないと、1歳にはならないわけです。 'ユーザー定義関数-標準モジュール Function mDATEDIF(日付 As Date) Dim Fdate As Long Dim Ldate As Long  Fdate = CLng(日付)  Ldate = CLng(Date) - 1 '満年齢を出す場合 mDATEDIF = Evaluate("DATEDIF(" & Fdate & "," & Ldate & ", ""y"")") End Function 'イベントドリブン型マクロ-シートモジュール Private Sub Worksheet_Change(ByVal Target As Range)  Dim Fdate As Long  Dim Ldate As Long  If Target.Address(0, 0) <> "A1" Then Exit Sub  If IsDate(Target) = False Then Exit Sub  Application.EnableEvents = False  Fdate = CLng(Target.Value)  Ldate = CLng(Date) - 1 '満年齢を出す場合  Range("B1").Value = Evaluate("DATEDIF(" & Fdate & "," & Ldate & ", ""y"")")  Application.EnableEvents = True End Sub

chunnsann
質問者

お礼

ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

見出しを右クリックして「コードの表示」で開いた場所に下記のコードを貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If IsDate(Target.Value) = True Then Target.Offset(0, 1) = DateDiff("yyyy", Target.Value, Date) End If End If End Sub

chunnsann
質問者

お礼

ありがとうございました。

関連するQ&A

  • EXCELで年令計算するDATEDIF関数

    EXCELで年令計算する関数DATEDIFを使って、生年月日の記入をすると年令を表示しますが、 記入がないと 111才 になってしまいます。生年月日の記入がないときには 0才 にしたいのですが、わかりません。   たとえば、生年月日のセルを         B12         基準日(関数TODAY()を使用 )を E3         年令表示セルを           B11 にして、セルB11に次の関数を入力します。     =DATEDIF(B12,E3,"Y") & "才" すると、生年月日がセルB12に入っていれば、年令を表示しますが、生年月日の記入がない(空欄)と111才と表示されてしまいます。空欄では0才などにしたいのですが、ご教示をお願いします。 セルの西暦・和暦やTODAY関数が影響するのかわかりません。

  • エクセルの年齢計算ができない(VBA)

    VBAでエクセル関数のDATEDIF関数を入力したいのですがうまくいきません。なにかいい方法はありませんか? 例)年齢基準値セルA1、終了期間B1でC1で年齢計算 Private Sub CommandButton1_Click() Range("C1").Value = "=DATEDIF(A1,B1,"y")" End Sub この記述でうまくいきません。 ようは、コマンドボタンクリックで、C1にDATEIF関数を入力したいのですが・・・

  • Excel2000で年齢計算したいのですが

    WindowsMeでExcel2000を使用しているものです。基準日と生年月日を入れると満年齢が自動計算されるようにしたいのですが、うまくDATEDIF関数が入力できず困っています。どなたかわかりやすく教えて頂けませんか?

  • 年齢別集計

    エクセルの質問です。 数千人分の顧客データを集計して年齢別に人数を数えたいと思います。とある書籍によると、DATEDIF関数を利用して、 =DATEDIF(C1,TODAY(),"Y")&"歳"  ※セルC1に生年月日が入力されています とすれば、年齢は出てきます。 ここで疑問なのは 1.最後の「&"歳"」の記述がないときには年齢が出てこない。単に数値だけを出すにはどうすればよいのか? 2.10~19歳、20~29歳、のように範囲を持たせて人数を集計・カウントするにはどうすればよいのか? です。 よろしくお願いします。

  • 空白セル参照時に0を表示しない

    年齢計算を行うにあたって、A1セルに生年月日、B1セルに年齢を求めたい年月日、C1セルに年齢を表示する場合はC1セルに「=DATEDIF(A1,B1,"Y") 」と入力してやれば年齢が出たのですが、これを設定してやるとA,B未入力の場合Cセルが0表示になってしまいます。 この0を表示させない為にはどのような関数を利用すればよいのか教えていただけないでしょうか? IF関数で出来るようなことが書かれているのですが、組み合わせ方がわかりません。 質問がわかりにくくて申し訳ございませんが、どなたかご教授お願いします。

  • EXCEL エクセル 年齢 DATEDIF関数 空白の場合

    EXCEL2007 年齢を計算するのに A1セルに 生年月日を入力、 B1セルに年齢  =DATEDIF(A1,TODAY(),"y")で  満年齢がでると思うのですが A1セルが空白の場合 109となります。 A1セルが空白の場合 B1セルも空白になる関数を教えてください。 本を見ながらの初心者です。よろしくお願いします。

  • エクセルで生年月日から現在の年齢を計算する関数はないですか?

    エクセル95か2000でかまわないのですが、生年月日から現在の年齢を自動的に計算する関数は何かないでしょうか? たとえば、あるセルに生年月日を入力しておきます。行に2002年10月、11月、12月・・・と入力しておき、それぞれ2002年10月、11月、12月の年齢が、生年月日から計算されて参照されるような関数です。

  • エクセルでの年齢計算についてですが…

    いつもお世話になります。 今回はエクセルで年齢計算をしたいのですが、ちょっとした問題があるのです。 と申しますのは、生年月日がA1に年号、A2に年、A3に月、A4に日とそれぞれ数字を入れ、A5に現時点での年齢を表示したいのです。  作成例)  A1  A2  A3  A4  A5  昭和  49   3   3  30 一般的な「DATEDIF関数」だと、セルが上記のようにバラバラでは対応してくれないので、困っているのです。 どうしたらよいのでしょうか。 ご回答の程、宜しくお願い致します。  

  • Excelの年齢関数を教えて下さい

    Lotus 1-2-3には @DATEDIF(@DATE(“y”,”m”,”d”),@NOW,”y”)という関数があって、@DATEに生年月日を入力すると現在の年齢がそのセルに表示され、重宝しています。 Excelを使う機会もあって、同じような関数を探しているのですが、分かりません。どなたか教えていただけませんか。

  • マクロの自動化

    お世話になります。 このたびエクセルでマクロを利用してある計算をしようとしたところ、行き詰ってしまったので質問させてもらいます。 やろうとしている計算は定数が4つ、変数が1つの3次関数の変数をゴールシークをつかって解くというもので、ゴールシーク動作のマクロ化までは成功しています。 ちなみに一応式を書いておくと以下のような感じです。 変数:x 定数:a b c d ax^3+bx^2+cx+d=0 では何に行き詰っているのかというと、そのゴールシークマクロの自動化です。 私の目指す自動化というのは、定数部分abcdが変化した際に変数の解が自動で導き出されるというものです。 しかし、私が探して見つけた目指す自動化に近い自動化の方法はどれも 定数セル内が変更された際に自動で再計算を行うというものでした。 今回の私のエクセルでは、各定数を求めるまでに相当長い計算プロセスがあり 必要な数値の入力(数字)⇒別セルへリンク&計算⇒最終的な定数の算出 となっているため、最終的な定数の算出のセルでは例えば=A363などとなっているためセル内が変更されたとは見なされず、再計算をしてくれません。 また、最初の必要な数値の入力において数値が変化したときにマクロを自動で走らせようにも その数が多すぎてとても追いきれません。 分かりにくい質問となってしまったと思いますが、どなたか私が目指す自動計算の組み方を教えていただけないでしょうか。 もちろん、ゴールシークやマクロにこだわらず、自動で計算してくれる方法があるのであればそれでも構いません。 よろしくお願いいたします。

専門家に質問してみよう