- 締切済み
マクロで年齢の自動計算
エクセルのA1のセルに生年月日を入力するとB1のセルに年齢が自動入力されるマクロを組みたいのですが教えてください。関数(DATEDIF)を利用してのやりかたはわかるのですがマクロを組んで同じことはできないでしょうか。よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >関数(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
- mshr1962
- ベストアンサー率39% (7417/18945)
見出しを右クリックして「コードの表示」で開いた場所に下記のコードを貼り付けてください。 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
お礼
ありがとうございました。
お礼
ありがとうございました。