'***************************************************************************************************
' カレンダー及び日付処理関連ワークシート関数 modCalendarForFomula1(Module)
'
' 本モジュールは「祝日パラメータ」シート及びmodAboutCalendar2を利用して営業日数などを関数利用します
' 「祝日パラメータ」シートのチェック処理を除外しているのでチェック済「祝日パラメータ」が前提となります
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'18/03/07(1.00)新規作成
'18/09/23(1.70)カレンダー関連機能のクラス化対応
'22/08/12(1.80)祝日名取得(GETHOLINAME)の追加
'***************************************************************************************************
Option Explicit
'***************************************************************************************************
' ■■■ ワークシート関数として利用するプロシージャ ■■■
'***************************************************************************************************
'* 処理名 :SUMEIGYONISSU2
'* 機能 :営業日数算出(土日祝日を除外)
'---------------------------------------------------------------------------------------------------
'* 返り値 :営業日数(Long) ※算出不可の場合はゼロ
'* 引数 :Arg1 = 期間開始日(Date)
'* Arg2 = 期間終了日(Date)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年03月07日
'* 作成者 :井上 治
'* 更新日 :2018年09月23日
'* 更新者 :井上 治
'* 機能説明:ワークシート関数利用のためのプロシージャ
'* 注意事項:開始日、終了日自体も営業日判断に適用される ※期間開始日≦期間終了日のこと
'***************************************************************************************************
Public Function SUMEIGYONISSU2(ByVal dteDate1 As Date, ByVal dteDate2 As Date) As Long
'-----------------------------------------------------------------------------------------------
' 営業日数算出(シート関数利用のため祝日シートチェックは除外)
Call modAboutCalendar2.FP_SumEigyoNissu(dteDate1, dteDate2, SUMEIGYONISSU2, 0, True)
End Function
'***************************************************************************************************
'* 処理名 :SUMEIGYOBI2
'* 機能 :営業日数経過後営業日算出(土日祝日を除外)
'---------------------------------------------------------------------------------------------------
'* 返り値 :営業日数経過後営業日(Date)
'* 引数 :Arg1 = 起算日(Date)
'* Arg2 = 経過日数(Long) ※±可能
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年03月07日
'* 作成者 :井上 治
'* 更新日 :2018年09月23日
'* 更新者 :井上 治
'* 機能説明:経過日数は翌日(翌営業日)を「1」として算出される(前営業日は「-1」)
'* 注意事項:経過日数がゼロの場合は起算日をそのまま返す(土日祝判断なし)
'***************************************************************************************************
Public Function SUMEIGYOBI2(ByVal dteDate1 As Date, ByVal lngKeika As Long) As Date
'-----------------------------------------------------------------------------------------------
' 営業日数経過後営業日算出(シート関数利用のため祝日シートチェックは除外)
Call modAboutCalendar2.FP_SumEigyoBi(dteDate1, lngKeika, SUMEIGYOBI2, True)
End Function
'***************************************************************************************************
'* 処理名 :CHECKEIGYOBI2
'* 機能 :その日が営業日かを判定
'---------------------------------------------------------------------------------------------------
'* 返り値 :判定結果(営業日=1, 休日=0)
'* 引数 :Arg1 = 対象日付(Date)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年03月07日
'* 作成者 :井上 治
'* 更新日 :2018年09月23日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:当該日付が日付でない場合はゼロを返す
'***************************************************************************************************
Public Function CHECKEIGYOBI2(ByVal vntDate As Variant) As Integer
'-----------------------------------------------------------------------------------------------
Static prevY As Long ' 読み込んだ年
Static prevM As Long ' 読み込んだ月
Static tblCalendar() As g_typAboutCalendar2 ' カレンダーテーブル
Dim dteDate As Date ' 対象日付
Dim currY As Long ' 対象日付の年
Dim currM As Long ' 対象日付の月
Dim currDIX As Long ' 対象日付の日INDEX
CHECKEIGYOBI2 = 0
' 対象日付チェック
If IsDate(vntDate) Then
dteDate = CDate(vntDate)
Else
Exit Function
End If
' 当該営業日から年・月・日の算出
currY = Year(dteDate) ' 年
currM = Month(dteDate) ' 月
currDIX = Day(dteDate) - 1 ' 日付位置INDEX
'-----------------------------------------------------------------------------------------------
' 年月の変異により該当月のカレンダーを取得し直す
If ((currY <> prevY) Or (currM <> prevM)) Then
prevY = currY
prevM = currM
' カレンダーテーブル作成(当月1ヶ月用)
Call modAboutCalendar2.FP_GetCalendarTable1(prevY, prevM, tblCalendar, True)
End If
'-----------------------------------------------------------------------------------------------
' 営業日判定
With tblCalendar(currDIX)
' 土日祝日以外は営業日
If ((.Yobi <> 0) And (.Yobi <> 6) And (.Syuku = 0)) Then
CHECKEIGYOBI2 = 1
Else
CHECKEIGYOBI2 = 0
End If
End With
End Function
'***************************************************************************************************
'* 処理名 :GETHOLINAME
'* 機能 :祝日名取得
'---------------------------------------------------------------------------------------------------
'* 返り値 :祝日名(String)
'* 引数 :Arg1 = 対象日付(Variant:Date)
'* Arg2 = 括弧等付加(Long) ※Option:1=カッコ、2=※
'* Arg3 = 空白付加(Long) ※Option:1=半角空白付加
'---------------------------------------------------------------------------------------------------
'* 作成日 :2022年08月12日
'* 作成者 :井上 治
'* 更新日 :2022年08月12日
'* 更新者 :井上 治
'* 機能説明:対象日付に対する祝日名を返す(カッコ付加や先頭空白付加のオプション有り)
'* 注意事項:対象日付が日付でない場合は空文字列を返す
'***************************************************************************************************
Public Function GETHOLINAME(ByVal vntDate As Variant, _
Optional ByVal lngOption1 As Long = 0, _
Optional ByVal lngOption2 As Long = 0) As String
'-----------------------------------------------------------------------------------------------
Static prevY As Long ' 読み込んだ年
Static prevM As Long ' 読み込んだ月
Static tblCalendar() As g_typAboutCalendar2 ' カレンダーテーブル
Dim dteDate As Date ' 対象日付
Dim currY As Long ' 対象日付の年
Dim currM As Long ' 対象日付の月
Dim currDIX As Long ' 対象日付の日INDEX
Dim strSyuku As String ' 祝日名(表示用Work)
Dim strCheck As String ' 祝日名先頭文字チェック
GETHOLINAME = ""
' 対象日付チェック
If IsDate(vntDate) Then
dteDate = CDate(vntDate)
Else
Exit Function
End If
' 当該営業日から年・月・日の算出
currY = Year(dteDate) ' 年
currM = Month(dteDate) ' 月
currDIX = Day(dteDate) - 1 ' 日付位置INDEX
'-----------------------------------------------------------------------------------------------
' 年月の変異により該当月のカレンダーを取得し直す
If ((currY <> prevY) Or (currM <> prevM)) Then
prevY = currY
prevM = currM
' カレンダーテーブル作成(当月1ヶ月用)
Call modAboutCalendar2.FP_GetCalendarTable1(prevY, prevM, tblCalendar, True)
End If
'-----------------------------------------------------------------------------------------------
' 祝日名の取得
With tblCalendar(currDIX)
' 祝日判定
If .Syuku <> 0 Then
' 祝日名先頭文字チェック
strCheck = Left(.SyukuNm, 1)
' 空白付加
If lngOption2 = 1 Then
strSyuku = Space(1)
End If
' 括弧等付加
Select Case lngOption1
Case 1
If strCheck <> "(" Then
strSyuku = strSyuku & "("
End If
Case 2
strSyuku = strSyuku & "※"
End Select
' 祝日名
strSyuku = strSyuku & .SyukuNm
' 閉じ括弧付加
If lngOption1 = 1 Then
If strCheck <> "(" Then
strSyuku = strSyuku & ")"
End If
End If
GETHOLINAME = strSyuku
End If
End With
End Function
'----------------------------------------<< End of Source >>----------------------------------------
これらがワークシート関数として呼び出されているモジュールです。