プロが教える店舗&オフィスのセキュリティ対策術

失礼いたします。
 VBAで年齢の計算を行いたいのですがなかなかうまくいきません。
=sub
Dim 開始日付 As String
Dim 終了日付 As String
Dim 年齢 As String
開始日付 = "S54/4/1"
終了日付 = "H22/4/1"
年齢 = "=DATEDIF(開始日付,終了日付,""Y"")"
=endsub

としても、DATEDIF関数は引数をうまく処理してくれないのです。
エクセル関数を使わずに、年齢を算出するか。
エクセル関数内に引数を代入する方法があれば教えていただけないでしょうか?

A 回答 (3件)

そういう場合は、Evaluateを使います。



Sub macro()
Dim 開始日付 As Date
Dim 終了日付 As Date
Dim 年齢 As String
開始日付 = "S54/4/1"
終了日付 = "H22/4/1"
年齢 = Application.Evaluate("=datedif(""" & Format(開始日付, "yyyy/mm/dd") _
  & """,""" & Format(終了日付, "yyyy/mm/dd") & """,""y"")")
MsgBox 年齢
End Sub
    • good
    • 0
この回答へのお礼

おお、ありがとうございます。
提示された式の意味はまったくわかりませんが^^;
問題は解決いたしました。

お礼日時:2009/12/16 17:35

VBAのは「DateDif」ではなく、「DateDiff」と記述します。



VBAのDateDiff関数のヘルプを見ておいて下さい。

Sub macro()
Dim 開始日付 As Date
Dim 終了日付 As Date
Dim 年齢 As String
開始日付 = "S54/4/1"
終了日付 = "H22/4/1"
年齢 = DateDiff("yyyy", 開始日付, 終了日付)
MsgBox 年齢
End Sub
    • good
    • 0
この回答へのお礼

datediffを使用すると、アクセスのdatediffのように数え年の扱いになるようです。
たとえば、
開始日付="2008/12/31" 
終了日付="2009/1/1"
とすると
年齢 = DateDiff("yyyy", 開始日付, 終了日付)

この場合、年齢が1歳になります。
なのでdatediffは使いたくないのですが・・・

お礼日時:2009/12/16 16:49

質問のコードでは、開始、終了日付が文字列のままなので、


DateValueで、日付シリアルに直してから計算する

それと、Dateiffの引数の使い方も間違い。
また、年齢は数値ですから、
 >Dim 年齢 As String
この宣言もIntegerなどに変えるべきです。

年齢 = DateDiff("yyyy", DateValue(開始日付), DateValue(終了日付))
 

以上です。
 

 

この回答への補足

とおもいましたが、上記の問題が発生しました、どうしたものか・・

補足日時:2009/12/16 16:51
    • good
    • 0
この回答へのお礼

勉強になりましたありがとうございます。

お礼日時:2009/12/16 16:38

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