dポイントプレゼントキャンペーン実施中!

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/02 10:02

見出しを右クリックして「コードの表示」で開いた場所に下記のコードを貼り付けてください。



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/02 10:02

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