Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
エクセルのDATEDIF関数をVBAで使用したいのですがどこが不備なのか教えて下さい
投稿日時: 18/10/09 16:32:08
投稿者: furuta

経過年数の判定を行っています。設定項目は、1算定基準年・月 2検索年・月 条件:6ヶ月以上経過していれば+1年とする。
エクセルの関数で作成すれば下記の通りです。
 
P74 = 索年・月     $Q$74 = 算定基準年・月
 
'=IF(DATEDIF(P74,$Q$74,"YM")>=6,DATEDIF(P74,$Q$74,"Y")+1,DATEDIF(P74,$Q$74,"Y"))
 
 
 
VBAで作成したのが下記の通りです
 
 
Function 経年(取得年 As String, 条件 As String, 基準年 As String, 月 As String) As String
 
   月 = WorksheetFunction.DATEDIF(取得年, 基準年, "YM")
     
  If 条件 = 1 And 月 >= 6 Then
   
       経年 = WorksheetFunction.DATEDIF(取得年, 基準年, "Y") + 1
         
 ElseIf 月 Then
  
      経年 = WorksheetFunction.DATEDIF(取得年, 基準年, "Y")
              
 End If
 
End Function
 
ワークシート関数の使い方がダメなのでしようか
ご教授お願いいたします。

回答
投稿日時: 18/10/09 16:54:04
投稿者: WinArrow
投稿者のウェブサイトに移動

>ワークシート関数の使い方がダメなのでしようか
>ご教授お願いいたします。
 
WorkSheetFunCtionには、サポートされていいない関数です。
 
引数を「年・月」と説明されたいますが、
掲示の数式を、シートに入力した場合、機能しますか?
 
DATEDIF関数は、年齢だったら、満年齢を求める関数ですが、
理解していますか?

回答
投稿日時: 18/10/09 17:24:25
投稿者: WinArrow
投稿者のウェブサイトに移動

>設定項目は、1算定基準年・月 2検索年・月
引数は「年・月」では、DATEDIF関数も使えませんが、
「日」を「1」として日付形式にする必要があります。
 
 
VBAには
DATEDIF関数と類似した
DATEDIFF関数があります。
しかし、引数:"YM"は使えませので
  
     Debug.Print DateDiff("m", Range("A1"), Range("B1")) Mod 12
こんな方法もあるかと思います。
DATEDIFF関数は、満年齢方式ではないが、
日部分が「1」だったら使えます。
どうしても
DATEDIF関数を使いたいならば
    Debug.Print Application.Evaluate("DATEDIF(A1,B1,""YM"")")
こんな方法もあります。
  
※セルA1、B1ともに:年月日の日付形式です。
 

回答
投稿日時: 18/10/09 19:27:49
投稿者: Suzu

DATEDIF は 関数一覧にも出てきませんよね?
一覧に出てくるのしかWorkSheetFunction では使用できません。
 
VBAで使用する場合は、DATEDIFF
 
 
DATEDIF と DATADIFF 戻り値 に違いがあります。
 
WinArrow さんがおっしゃる

引用:
DATEDIFF関数は、満年齢方式ではないが、日部分が「1」だったら使えます。

がその部分です。
 
 =DATEDIF("2017/12/31","2018/1/1","ym") : 0
  DATEDIFF("m","2017/12/31","2018/1/1") : 1
 
希望の動作になるか、きちんと確認して式を構築してくださいね。[/quote]

回答
投稿日時: 18/10/09 19:54:38
投稿者: 半平太

>P74 = 索年・月     $Q$74 = 算定基準年・月
 
まず、その具体例を示して頂いた方が無難ですね。
 
まさか、1980・1 なんて類のデータじゃないと思うので。

回答
投稿日時: 18/10/10 11:52:09
投稿者: 角田
投稿者のウェブサイトに移動

下記の ktDATEDIF のマクロコードを標準モジュールにコピペすれば、
VBAで DATEDIF と同様の計算(同じインターバル記号で)ができます。
 
AddinBox / 期間計算マクロ(ktDATEDIF)
http://addinbox.sakura.ne.jp/Excel_Tips05.htm#ktDATEDIF2
 

投稿日時: 18/10/12 12:12:15
投稿者: furuta

皆さん色々ご教授ありがとうございました。再度休日にチャレンジしてみます。