Option Explicit 'EDATEと同機能のユーザ定義関数 Function MyEDate(ByVal dateStart As Date, _ ByVal iMonth As Integer) As Variant Dim dateResult As Date Dim iDay_Start As Integer Dim iDay_Result As Integer On Error GoTo ErrorHandler '開始日の日を取得 iDay_Start = Day(dateStart) '指定月後の日付を取得 dateResult = DateSerial(Year(dateStart), _ Month(dateStart) + iMonth, iDay_Start) '結果の日付の日を取得 iDay_Result = Day(dateResult) '日が一致していたら... If iDay_Result = iDay_Start Then '結果の日付をそのまま返す MyEDate = dateResult Else '一致していなかったら、前月最終日を返す MyEDate = dateResult - iDay_Result End If Exit Function ErrorHandler: MyEDate = CVErr(xlErrNum) End Function