No.1ベストアンサー
- 回答日時:
こんばんは。
わたしもこれをワークシート関数で求めようとして挫折しました。
ワークシート関数にも、Datedifという関数があるのですが、末日計算の端日数処理でバグがあり、信頼に欠け、使えませんでした。
しかたなく、一般公開されているサンプルコードで下記のようなVBAでユーザー定義関数を用いるしかありませんでした。
使用方法
下記のマクロのコードを標準モジュールに貼り付け、ワークシートのセルに
開始日A1
終了日B1 の場合
=ktDATEDIF(A1,B1,"YMD",FALSE)
としてみてください。
最後の引数は初日算入ならTRUE, 初日不算入ならFALSEです。 (民法規定は[初日 不算入]が基本です)
『開始日』『終了日』に対し、民法規定に従って【y年mヶ月d日】を求めるマクロ。
Public Function ktDATEDIF(ByVal StartDate As Date, _
ByVal EndDate As Date, _
ByVal Interval As String, _
ByVal FirstDay As Boolean) As Variant
' [Interval]
' YMD:"yyyy年mヶ月d日"で編集(文字列)
' Y:期間内満年数, M:期間内満総月数
' YM:端数の月数, MD:端数の日数
' [FirstDay]
' 初日算入=True, 初日不算入=False (民法規定は[初日 不算入]が基本)
Dim dtmFirstDate As Date '起算日
Dim dtmLastDate As Date '満了日
Dim wkDate As Date
Dim intMonth As Integer '総月数
Dim intYear As Integer
Dim intMonth_in_Year As Integer '年未満の月数
Dim intDay_in_Month As Integer '月未満の日数
If (StartDate > EndDate) Then
ktDATEDIF = "Error"
Exit Function
End If
If (FirstDay = False) Then
dtmFirstDate = StartDate + 1 '民法規定は[初日 不算入]が基本
Else
dtmFirstDate = StartDate 'True:[初日算入]指定
End If
dtmLastDate = EndDate
'注)[DateDiff関数]自体は初日不算入で処理している
If (Day(dtmFirstDate) = 1) Then
'起算日が1日(開始日が月末日)の場合、月の大小閏に係わりなく
'[月末日]までで『丸Nヶ月』
'月の大小閏に影響されないように「月末日~終了日」を1日分シフトして
'「1日~(終了日+1)」で求める。
intMonth = DateDiff("m", dtmFirstDate, (dtmLastDate + 1))
intYear = intMonth \ 12
intMonth_in_Year = intMonth Mod 12
If (Day(dtmLastDate + 1) = 1) Then '満了日(終了日)が月末か?
intDay_in_Month = 0
Else
intDay_in_Month = Day(dtmLastDate)
End If
Else
'起算日≠1日の場合、「起算日の応答日前日」までで『丸Nヶ月』
intMonth = DateDiff("m", (dtmFirstDate - 1), dtmLastDate)
wkDate = DateAdd("m", intMonth, (dtmFirstDate - 1))
If (wkDate > dtmLastDate) Then
intMonth = intMonth - 1
wkDate = DateAdd("m", intMonth, (dtmFirstDate - 1))
End If
intDay_in_Month = DateDiff("d", wkDate, dtmLastDate)
intYear = intMonth \ 12
intMonth_in_Year = intMonth Mod 12
End If
Select Case UCase(Interval)
Case "YMD"
ktDATEDIF = intYear & "年" & intMonth_in_Year & "ヶ月" & intDay_in_Month & "日"
Case "Y"
ktDATEDIF = intYear
Case "M"
ktDATEDIF = intMonth
Case "YM"
ktDATEDIF = intMonth_in_Year
Case "MD"
ktDATEDIF = intDay_in_Month
Case Else
ktDATEDIF = "Error"
End Select
End Function
この回答へのお礼
お礼日時:2006/05/30 23:59
merlionXXさんこんばんは!
すごくご丁寧にありがとうございます!m(^o^)m
今、調べていたら、dateifを使えばいい、とネットにあったのですが、端数処理に信頼がおけない、とのことで、、
ここまで詳しく教えて頂いてありがたいです。
早速あした使わせて頂こうと思います!
ありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 至急です><Excelの関数を教えてください。 2 2022/03/22 17:56
- Excel(エクセル) Excel ある日の45日後の計算 及び 3か月後の計算 6 2022/04/05 13:44
- Excel(エクセル) 現時点の年齢を算出して、その年齢と一致したセルを色付けしたい。 4 2022/06/23 17:49
- Excel(エクセル) ExcelにてA1セルに1、B1セルに月と入力した際に、A列に日付、B列に曜日が入力される様になる為 1 2023/03/02 06:47
- 簿記検定・漢字検定・秘書検定 簿記2級 表作成時の仕訳の問題 2 2022/07/07 18:15
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- Excel(エクセル) Excelのマクロについてご教授ください 2 2023/02/25 09:43
- Excel(エクセル) B列に、A列の数字が偶数の場合は1減算した数字、奇数の場合はそのまま数字を自動表示したい 4 2022/04/16 12:01
- Excel(エクセル) 至急回答お願いいたします><Excel関数について 8 2022/03/25 10:34
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ペントハウスは述べ床面積に入る?
-
階段下の床面積参入について 集...
-
外置き給湯器が床面積算入?
-
敷地上に設置されている受水槽...
-
片持ち式カーポートの先端の1m...
-
建物表示登記の図面と求積にポ...
-
共同住宅の容積、エントランス...
-
建築基準法 塔屋の最高高さに...
-
物品販売業を営む店舗の階段幅
-
直径1m未満の外部の螺旋階段は...
-
柱付きの外廊下・外階段は建築...
-
2方向避難について
-
搭屋の容積算入
-
エスカレーター1段の高さ
-
共同住宅 2以上の直通階段
-
屋外階段で地上階に降りたあと...
-
住宅のポーチ階段の手すりについて
-
建物の延床面積計算は、屋上階...
-
店舗の階段の幅と踊り場
-
長期優良住宅について
おすすめ情報