• 締切済み

マクロで年齢の自動計算

エクセルの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% (7417/18945)
回答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
質問者

お礼

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