• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

エクセルのセル(Range)に関連した属性(プロパティ)は値のほかに、数式・関数式(Formula)や書式(表示形式)NumberFormatなど があります。この点を認識してください。関数式は値の領域に記録されるものでなく、Formulaの記録域に記憶されるべきものです。 ですから (1)セルに式を埋め込むなら Sub test03() Cells(1, "C").Formula = "=DATEDIF(B1,A1,""D"")" End Sub のようにします。引数は開始日、終了日の順です。質問のように年で計る場合は Sub test05() Cells(1, "C").Formula = "=DATEDIF(B1,A1,""y"")" End Sub (2)VBAで計算してセルに結果を値としてセットする場合、 (A)エクセルのワークシート関数で使えるものがVBAでは使えないものがある。 (B)使えても書き方において修正が必要なものがある。 点の認識が必要です。 使える場合は一般にApplication.WorksheetFunctionやWorksheetFunctionをつけて Sub test06() Cells(2, "C") = WorksheetFunction.Sum(Range("a2:b2")) End Sub のようにする。 ワークシートの関数と少々違いA2:B2をRange("A2:B2")のように書く。 ーーー 本件は Sub test07() Cells(1, "C") = WorksheetFunction.Datedif(Range("B1"), Range("A1"), "D") End Sub も Sub test08() Cells(1, "C") = WorksheetFunction.DateDiff(Range("B1"), Range("A1"), "D") End Sub もエラーになり アクセスにDateDiff関数があり、アクセスを入れているせいか Sub test04() Cells(1, "C") = DateDiff("yyyy", Range("B1"), Range("A1")) End Sub は(エクセルVBAで実行しても)結果が出ました。第1引数の書き方が特殊。 ーーー Datedif関数は特殊なようで http://support.microsoft.com/kb/407898/ja(エクセル95) MM = Evaluate(Str) でやれと出ています。 ーー http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page9.htm が参考になりますのでご覧ください。

19760101
質問者

お礼

遅くなりましたが、ありがとうございました。なにぶん初心者なもので、BVAはど素人なのですいません。勉強になりました。

その他の回答 (3)

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

こんにちは。Wendy02です。 こうだと思います。 Range("C1").FormulaLocal = "=DATEDIF(A1,B1," & """y""" & ")" Value 値なら、Evaluate で、そのまま入れてしまってもよいはずですが。

19760101
質問者

お礼

遅くなりましたが、ありがとうございました。なにぶん初心者なもので、BVAはど素人なのですいません。勉強になりました。

  • Gin_F
  • ベストアンサー率63% (286/453)
回答No.2

> Range("C1").Value = "=DATEDIF(A1,B1,"y")" Range("C1").Value = WorksheetFunction.DATEDIF(Range("A1"),Range("B1"),"y")) では、どうでしょうか? @IT:Windows TIPS -- Tips:Excelのユーザー定義関数で既存のワークシート関数を利用する http://www.atmarkit.co.jp/fwin2k/win2ktips/520exwsfunc/exwsfunc.html

19760101
質問者

お礼

遅くなりましたが、ありがとうございました。なにぶん初心者なもので、BVAはど素人なのですいません。勉強になりました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

y にどのような値が入るのか解りませんが、 Range("C1").Formula = "=DATEDIF(A1,B1," & y & ")"

19760101
質問者

お礼

遅くなりましたが、ありがとうございました。なにぶん初心者なもので、BVAはど素人なのですいません。勉強になりました。

関連するQ&A