祝日パラメータを社内で一元化したい

Excelブックは「複製」をいくらでも作ることができます。
「複製」そのものは防御できません。   前のページまでは、祝日ロジックをプログラミングではなく「パラメータ」として投入できるようにして、 プログラム技術者ではなくても祝日の変更についてメンテナンスができるようにする、というところにフォーカスを当てた説明をしてきました。
中では「配布の問題」が発生するという説明を折々に入れてはきましたが、 「じゃあどうするの?」という件については「まずはバージョン管理」という説明に止めています。 「配布の問題」をご覧の方は意識してプログラム部分をアドインに移すとかを考えていただけると思いますが、 プログラムとしても初心者では難しい領域のことになるでしょう。
「配布の問題」で説明している本来の趣旨は「プログラムによる仕組みの動作レベルの均質化」なのですが、 「祝日パラメータ」のことについて考えると、プログラムが同一であっても異なる結果が出ることになりかねないということがあります。
これは「祝日パラメータシート」方式であっても、祝日処理ロジックが書き込まれた「従来方式マクロ」が仕込まれたワークブックでも全く同じです。 古い仕様のワークブックがコピーされて新規に利用されることがいつまでも無くなりません。

そこで、ここでは祝日処理が入っているExcelブックが社内にばらまかれても、同じ「祝日パラメータ」で処理されるようにし、 さらにその一箇所にある「祝日パラメータ」を更新すれば社内の全部が最新の「祝日パラメータ」で処理されるようになるという方法を考えてみましょう。
問題は「祝日パラメータ」をどこにどのような形態で配置するかです。
最低でも社内で全社から参照できる共有サーバがある必要があります。部署内で構わないのであれば部署内の共有サーバと考えて下さい。
「祝日パラメータシート」だけのワークブックを作成して、共有サーバ上に置いておく方法も考えられますが、単純なテキストファイルを読み込むのと比べるとレスポンスに影響が出るので、 テキストファイル形式の「祝日パラメータ」を読み込む方法として説明しています。

今回のサンプルはHTTPで接続するものも含めているのでWebサーバでも構いません。 Microsoftネットワークとしての「共有ファイルサーバ」だとすると、ログイン認証を通らないと内部のファイル等に到達できないという問題があるので、 匿名認証のWebサーバに配置できる方が運用上で安全だと思います。
カレンダー処理マクロを持つワークブック自体がその共有サーバ上に置かれているなどで共有サーバへのログイン認証が確立しているのであれば、共有サーバ上に配置する方法でも構いません。

サンプルではこういった環境の上に「祝日パラメータ」はテキストファイルとして配置します。
ファイルの中身は、

....*....1....*....2....*....3....*....4
0100100000009999元旦
0101500000001999成人の日
0110002120009999成人の日
0201100019679999建国記念の日
0202300020209999天皇誕生日
0390000000009999春分の日
0402900000001988天皇誕生日
0402900019892006みどりの日
0402900020079999昭和の日
0500100020192019新天皇即位の日
0500300000009999憲法記念日
0500410019862006国民の休日
0500400020079999みどりの日
0500500000009999こどもの日
0702000019962002海の日
0710003120032019海の日
0702300020202020海の日
0710003120219999海の日
0702400020202020スポーツの日
0801100020162019山の日
0801000020202020山の日
0801100020219999山の日
0901500000002002敬老の日
0910003120039999敬老の日
0990000000009999秋分の日
1001000019661999体育の日
1010002120002019体育の日
1010002120219999スポーツの日
1002200020192019即位礼正殿の儀
1100300000009999文化の日
1102300000009999勤労感謝の日
1202300019892018天皇誕生日
....*....1....*....2....*....3....*....4
この祝日パラメータ各行の内容
  1,2桁目:月(01〜12)
    3桁目:処理区分(0=固定日、1=HappyMonday、2=会社休日、9=特殊)
  4,5桁目:[固定日]日付(01〜31)
    6桁目:[固定日]振替有無(0=通常、1=振休無し)
    7桁目:[HappyMonday]第n週
    8桁目:[HappyMonday]曜日(1=月曜、月曜日以外不可)
 9-12桁目:開始年(不明は0000)
13-16桁目:終了年(不明は9999)
17桁目以降:祝日名
このような感じです。
(緑字部分は説明のための記述で実際のファイル上には記述されていません。)

年間カレンダー作成のイメージ
(画像をクリックすると、このページのサンプルがダウンロードできます)

サンプルはこのように前頁と全く同じ動きをするもので、違うのは「祝日パラメータをどこから持ってくるのか」だけです。
サンプルのExcelワークブックを見ていただければ判りますが、祝日パラメータはシートとしても存在しないし、 前頁のようなソースコードの記述もありません。

ではサンプルではどこから祝日パラメータを読み込んでくるのかというと、当サイトのトップページレベルに置いてあるExcelDeOshigotoHoliday.txt というテキストファイルから読み出しています。 ←このファイル名のところをクリックするとブラウザ上にそのファイルが開きます。
(このファイルの内容はあくまでサンプルとして利用して下さい。祝日についてのメンテナンスは保証いたしかねます)

テキストファイルというようなファイルで配置する以外に、SQLServerのようなデータベースにテーブルとして登録してしまう方法も考えられます。 私の勤務先の会社でもこの方法を採っており、その祝日パラメータを管理上でメンテナンスする仕組みも完備させていますが、 環境面で難しい場合が多くありサンプルとして適さないので紹介していません。

テキストファイルであれば事前にローカルPCなど他の場所で変更を行ない充分に検証してから配置すれば済むのでメンテナンス性が良く、 社内にあるWebサーバに配置できるなら、通常HTTP側からのアクセスは「読み取り専用」なので書き換えは発生しません。

逆に「共有ファイルサーバ」に配置する方法を採る場合は、ユーザー認証(認証を通過していないと祝日パラメータが読み出せない)の問題と、 ユーザー権限により管理者以外のユーザーからこの祝日パラメータが書き換えられないかという点に配慮する必要が発生します。

今回の仕組みの利用方法は?
この機能を利用中のワークブックでこれらを利用するためには、プロジェクトに以下のものを持ち込んで下さい。

オブジェクト 用途等
modAboutCalendar2DF クラスの初期化及び月間カレンダーテーブルのユーザー定義や公開プロシージャが収容されています。 前頁のmodAboutCalendar2Rと記述要件は変わらないのですが、呼び出しクラス名が変わったため名称も変更しています。
呼び出しクラス名以外は前頁のmodAboutCalendar2Rと全く同じです。
clsAboutCalendar2DF 実際のカレンダー作成の全機能が収容されているクラスです。利用者プログラムから呼び出すことも可能ですが、上記の「modAboutCalendar2DF」が呼び出し部分を行なうようにしているので、 利用者プログラムでは意識しなくても良いようにしてあります。
先頭のモジュールレベルに祝日パラメータファイルのフルパス名が定数として登録されているので、必要の応じて変更して下さい。 このフルパス名が利用環境で一意になっていなくてはなりません。
祝日パラメータファイルが読み出せないことが考えられますが、この場合はシステムエラーメッセージと「※作成するカレンダーには祝日が反映されません。」が表示されて、 以降は祝日なしでカレンダー処理が行なわれます。
機能の呼び出し方については、前ページ等のソースコードを参考にして下さい。

公開するモジュール(modAboutCalendar2DF)の公開プロシージャは以下の7つです。

プロシージャID 説明
GP_InitAboutCalendar カレンダー関連関数クラス初期化
[戻値]なし
[引数]なし
GP_GetCalendarTable1 カレンダーテーブル作成(当月1ヶ月用)
[戻値]なし
[引数]@年
         A月
         Bカレンダーテーブルが返される
※カレンダー関連関数クラスが初期化済でない時は本処理から初期化される
GP_GetCalendarTable1R カレンダーテーブル作成(当月1ヶ月用)
[戻値]なし
[引数]@年
         A月
         Bカレンダーテーブルが返される
※カレンダー関連関数クラスが初期化済であること(本処理内では判定しない)
GP_GetCalendarTable3 カレンダーテーブル作成(当月+前後の3ヶ月用)
[戻値]なし
[引数]@年
         A月
         Bカレンダーテーブルが返される
         C当月開始位置INDEXが返される(Option)
         D当月終了位置INDEXが返される(Option)
※カレンダー関連関数クラスが初期化済でない時は本処理から初期化される
GP_GetCalendarTable3R カレンダーテーブル作成(当月+前後の3ヶ月用)
[戻値]なし
[引数]@年
         A月
         Bカレンダーテーブルが返される
         C当月開始位置INDEXが返される(Option)
         D当月終了位置INDEXが返される(Option)
※カレンダー関連関数クラスが初期化済であること(本処理内では判定しない)
GP_SumEigyoNissu 営業日数算出(土日祝日を除外)
[戻値]なし
[引数]@期間開始日
         A期間終了日
         B営業日数が返される
         C歴日数が返される(Option)
GP_SumEigyoBi 営業日数経過後営業日算出(土日祝日を除外)
[戻値]なし
[引数]@起算日
         A経過営業日数(マイナス可)
         B算出結果(営業日日付)が返される

それではソースコードです。
では、「カレンダー関連呼び出しモジュール(modAboutCalendar2DF)」のソ−スコードです。
上の表にある各プロシージャが並んでいます。
先に説明した通りで前頁の「modAboutCalendar2R」と呼び出しクラス名が「clsAboutCalendar2R」から「clsAboutCalendar2DF」に替わっただけです。

'***************************************************************************************************
'   カレンダー関連関数(クラス呼び出し部分)                      modAboutCalendar2DF(Module)
'
'   作成者:井上治  URL:http://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'   ※カレンダー関連関数の主要部分はクラス(clsAboutCalendar2DF)側に実装されている
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'18/09/17(1.70)新規作成
'18/09/23(1.71)クラス初期化判定を行なわないプロシージャを追加(連続呼び出し用)
'18/12/18(1.80)祝日パラメータをファイルから読み込む方式として新規作成
'***************************************************************************************************
Option Explicit
'===================================================================================================
' 祝日含むカレンダーテーブル用ユーザー定義(公開)
Public Type g_typAboutCalendar2
    Hiduke As Date                                  ' 日付
    Yobi As Long                                    ' 曜日(0=日、1=月、2=火〜6=土)
    Syusu As Long                                   ' 週数(1始まりで日曜日発見時に1加算)
    HmSyusu As Long                                 ' 週数(0始まりで月曜日発見時に1加算) ※祝日法(HM)対応
    Syuku As Long                                   ' 祝日判定(0=通常、1=祝日、2=振替休日、3=会社休日)
    SyukuNm As String                               ' 祝日名称
    FurikaeKbn As Long                              ' 振替区分(0=通常、1=振替休日を行なわない)
End Type
'---------------------------------------------------------------------------------------------------
' カレンダー関連関数クラス
Public g_clsAboutCalendar As clsAboutCalendar2DF    ' カレンダー関連関数クラス
Private g_blnInitAboutCalendar As Boolean           ' カレンダー関連関数クラス初期化判定
' [注]VBAではモジュール保持変数の「保持」は保証されない

'***************************************************************************************************
'   ■■■ 公開プロシージャ(Public) ■■■
'***************************************************************************************************
'* 処理名 :GP_InitAboutCalendar
'* 機能  :カレンダー関連関数クラス初期化
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月17日
'* 作成者 :井上 治
'* 更新日 :2018年09月23日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:初期化済みの場合はスキップされる
'***************************************************************************************************
Public Sub GP_InitAboutCalendar()
    '-----------------------------------------------------------------------------------------------
    ' 未初期化なら初期化を行なう
    If Not g_blnInitAboutCalendar Then
        ' カレンダー関連関数クラスを初期化(クラス側で祝日パラメータテーブルが作成される)
        Set g_clsAboutCalendar = New clsAboutCalendar2DF
        g_blnInitAboutCalendar = True
    End If
End Sub

'***************************************************************************************************
'* 処理名 :GP_GetCalendarTable1
'* 機能  :カレンダーテーブル作成(当月1ヶ月用)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = 年(Long)
'*      Arg2 = 月(Long)
'*      Arg3 = カレンダーテーブル(Array:Structure)         ※Ref参照
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月17日
'* 作成者 :井上 治
'* 更新日 :2018年09月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Public Sub GP_GetCalendarTable1(ByVal lngY As Long, _
                                ByVal lngM As Long, _
                                ByRef tblCalendar() As g_typAboutCalendar2)
    '-----------------------------------------------------------------------------------------------
    ' カレンダー関連関数クラス初期化
    Call GP_InitAboutCalendar
    ' カレンダーテーブル作成(当月分)
    Call g_clsAboutCalendar.GetCalendarTable1(lngY, lngM, tblCalendar)
End Sub

'***************************************************************************************************
'* 処理名 :GP_GetCalendarTable1R
'* 機能  :カレンダーテーブル作成(当月1ヶ月用)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = 年(Long)
'*      Arg2 = 月(Long)
'*      Arg3 = カレンダーテーブル(Array:Structure)         ※Ref参照
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月23日
'* 作成者 :井上 治
'* 更新日 :2018年09月23日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:カレンダー関連関数クラスが初期化済であること(本処理内では判定しない)
'***************************************************************************************************
Public Sub GP_GetCalendarTable1R(ByVal lngY As Long, _
                                 ByVal lngM As Long, _
                                 ByRef tblCalendar() As g_typAboutCalendar2)
    '-----------------------------------------------------------------------------------------------
    ' カレンダーテーブル作成(当月分)
    Call g_clsAboutCalendar.GetCalendarTable1(lngY, lngM, tblCalendar)
End Sub

'***************************************************************************************************
'* 処理名 :GP_GetCalendarTable3
'* 機能  :カレンダーテーブル作成(当月+前後の3ヶ月用)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = 年(Long)
'*      Arg2 = 月(Long)
'*      Arg3 = カレンダーテーブル(Array:Structure)         ※Ref参照
'*      Arg4 = カレンダーテーブル当月開始INDEX(Long)       ※Ref参照(Option)
'*      Arg5 = カレンダーテーブル当月終了INDEX(Long)       ※Ref参照(Option)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月17日
'* 作成者 :井上 治
'* 更新日 :2018年09月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Public Sub GP_GetCalendarTable3(ByVal lngYear As Long, _
                                ByVal lngMonth As Long, _
                                ByRef tblCalendar() As g_typAboutCalendar2, _
                                Optional ByRef lngCurrStartIx As Long = -1, _
                                Optional ByRef lngCurrEndIx As Long = -1)
    '-----------------------------------------------------------------------------------------------
    ' カレンダー関連関数クラス初期化
    Call GP_InitAboutCalendar
    ' カレンダーテーブル作成(当月+前後の3ヶ月用)
    Call g_clsAboutCalendar.GetCalendarTable3(lngYear, _
                                              lngMonth, _
                                              tblCalendar, _
                                              lngCurrStartIx, _
                                              lngCurrEndIx)
End Sub

'***************************************************************************************************
'* 処理名 :GP_GetCalendarTable3R
'* 機能  :カレンダーテーブル作成(当月+前後の3ヶ月用)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = 年(Long)
'*      Arg2 = 月(Long)
'*      Arg3 = カレンダーテーブル(Array:Structure)         ※Ref参照
'*      Arg4 = カレンダーテーブル当月開始INDEX(Long)       ※Ref参照(Option)
'*      Arg5 = カレンダーテーブル当月終了INDEX(Long)       ※Ref参照(Option)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月23日
'* 作成者 :井上 治
'* 更新日 :2018年09月23日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:カレンダー関連関数クラスが初期化済であること(本処理内では判定しない)
'***************************************************************************************************
Public Sub GP_GetCalendarTable3R(ByVal lngYear As Long, _
                                 ByVal lngMonth As Long, _
                                 ByRef tblCalendar() As g_typAboutCalendar2, _
                                 Optional ByRef lngCurrStartIx As Long = -1, _
                                 Optional ByRef lngCurrEndIx As Long = -1)
    '-----------------------------------------------------------------------------------------------
    ' カレンダーテーブル作成(当月+前後の3ヶ月用)
    Call g_clsAboutCalendar.GetCalendarTable3(lngYear, _
                                              lngMonth, _
                                              tblCalendar, _
                                              lngCurrStartIx, _
                                              lngCurrEndIx)
End Sub

'***************************************************************************************************
'* 処理名 :GP_SumEigyoNissu
'* 機能  :営業日数算出(土日祝日を除外)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = 期間開始日(Date)
'*      Arg2 = 期間終了日(Date)
'*      Arg3 = 営業日数(Long)                              ※Ref参照
'*      Arg4 = 歴日数(Long)                                ※Ref参照(Option)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月17日
'* 作成者 :井上 治
'* 更新日 :2018年09月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:開始日、終了日自体も営業日判断に適用される
'***************************************************************************************************
Public Sub GP_SumEigyoNissu(ByVal dteDateF As Date, _
                            ByVal dteDateT As Date, _
                            ByRef lngCntEigyo As Long, _
                            Optional ByRef lngCntReki As Long = 0)
    '-----------------------------------------------------------------------------------------------
    ' カレンダー関連関数クラス初期化
    Call GP_InitAboutCalendar
    ' 営業日数算出(土日祝日を除外)
    Call g_clsAboutCalendar.SumEigyoNissu(dteDateF, dteDateT, lngCntEigyo, lngCntReki)
End Sub

'***************************************************************************************************
'* 処理名 :GP_SumEigyoBi
'* 機能  :営業日数経過後営業日算出(土日祝日を除外)
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = 起算日(Date)
'*      Arg2 = 経過日数(Long)                              ※±可能
'*      Arg3 = 営業日数経過後営業日(Date)                  ※Ref参照(Option)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月17日
'* 作成者 :井上 治
'* 更新日 :2018年09月17日
'* 更新者 :井上 治
'* 機能説明:経過日数は翌日(翌営業日)を「1」として算出される(前営業日は「-1」)
'* 注意事項:経過日数がゼロの場合は起算日をそのまま返す(土日祝判断なし)
'***************************************************************************************************
Public Sub GP_SumEigyoBi(ByVal dteDateF As Date, _
                         ByVal lngCntKeika As Long, _
                         ByRef dteDateT As Date)
    '-----------------------------------------------------------------------------------------------
    ' カレンダー関連関数クラス初期化
    Call GP_InitAboutCalendar
    ' 営業日数経過後営業日算出(土日祝日を除外)
    Call g_clsAboutCalendar.SumEigyoBi(dteDateF, lngCntKeika, dteDateT)
End Sub

'----------------------------------------<< End of Source >>----------------------------------------

続いて、実際の処理を行なうクラス「clsAboutCalendar2DF」です。
前頁の「clsAboutCalendar2R」では最後の方に祝日パラメータを作成するための個々の祝日の記述がありましたが、 「clsAboutCalendar2DF」ではファイルから祝日パラメータを読み込むため、個々の祝日の記述はありません。 代わりにファイルから祝日パラメータ読み込む記述があり、HTTP経由か通常のファイルかで処理が分れています。
他のプロシージャはここでは省略していますが、基本的には「祝日パラメータシート方式」と同じ記述です。 関心がある方は両方のソースコードを比べてみて下さい。
先頭の方にある定数の「祝日パラメータファイルのパス(又はURL)」とコメント説明されているのが実際に読み込まれる祝日パラメータのファイル名です。

'***************************************************************************************************
'   カレンダー及び日付処理(祝日含む)関連関数クラス              clsAboutCalendar2DF(Class)
'
'   ※本クラスの操作は全てカレンダー関連モジュール(modAboutCalendar2DF)で行ないます
'   本モジュールは祝日パラメータテーブルを作成してその祝日情報を元にカレンダーテーブルを作成します
'
'   作成者:井上治  URL:http://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'   [参照設定]
'   ・Microsoft Scripting Runtime
'   ・Microsoft XML, v6.0
'   ・Microsoft ActiveX Data Objects 2.x Library
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'18/02/07(1.00)新規作成
'18/02/08(1.10)カレンダーテーブルに振替区分(0=通常、1=振替休日を行なわない)を追加する対応
'18/02/08(1.10)「カレンダーテーブル作成(当月+前後の3ヶ月用)」を追加
'18/02/10(1.20)クラス化移行のため、本モジュールはユーザー定義のみとする
'18/02/18(1.30)動作改善のため再作成(クラス化は廃止)
'18/02/21(1.40)GetCalendarTable3に当月開始・終了INDEXを返す引数(Option)を追加
'18/02/21(1.40)名称変更(g_typCalendar2⇒g_typAboutCalendar2) ※他との重複対応
'18/02/28(1.50)会社休日適用時に会社休日が振替休日や国民の休日と重なる時は法制休日を優先させる対応
'18/03/07(1.51)1日が日曜日だと週数が2始まりになってしまう件を修正
'18/03/07(1.60)各関数にチェック処理をスキップするオプションを追加(事前チェックが済んでいる前提です)
'18/09/17(1.70)「週数」のカウント誤りを再修正
'18/09/17(1.70)祝日パラメータシートを使わない方式としてクラス化(チェック処理廃止⇒Subプロシージャ化)
'18/09/23(1.71)クラス初期化判定を行なわないプロシージャを追加(連続呼び出し用、クラス側変更無し)
'18/10/15(1.71)コード、コメント整理(バージョン値更新無し)
'18/10/23(1.72)祝日パラメータテーブル要素追加の引数INDEXを廃止する対応(内部Static変数に変更)
'18/12/08(1.73)新天皇即位の日(5/1)、即位礼正殿の儀(10/22)を2019年限定で追加(名称は暫定)
'18/12/18(1.80)祝日パラメータをファイルから読み込む方式として新規作成
'***************************************************************************************************
Option Explicit
'===================================================================================================
'  ↓↓↓ バージョン値、バージョン更新日は本クラスの変更を行なう時に必ず更新すること ↓↓↓
Private Const g_cnsCalendarVersion As String = "1.80"           ' 本クラスのバージョン
Private Const g_cnsCalendarVerUpdDate As Date = #12/18/2018#   ' バージョン更新日
'  ↑↑↑ バージョン値、バージョン更新日は本クラスの変更を行なう時に必ず更新すること ↑↑↑
' 祝日パラメータファイルのパス(又はURL)
Private Const g_cnsSyukuParaPath As String = _
    "http://www.asahi-net.or.jp/~ef2o-inue/ExcelDeOshigotoHoliday.txt"
'Private Const g_cnsSyukuParaPath As String = "E:\Web\ExcelDeOshigotoHoliday.txt"
'===================================================================================================
Private Const g_cnsFuri As String = "(振替休日)"
Private Const g_cnsKyu2 As String = "国民の休日"
Private Const g_cnsKyu3 As String = "(会社休日)"
'---------------------------------------------------------------------------------------------------
' 祝日パラメータテーブル用ユーザー定義
Private Type g_typParamater
    Getsu As Long                                   ' 月
    SyoriKbn As Long                                ' 処理区分(0=固定日、1=HappyMonday、2=会社休日、9=特殊)
    Hiduke As Long                                  ' [固定日]日(Date型ではない)
    FurikaeKbn As Long                              ' [固定日]振替区分(0=通常、1=振替休日を行なわない)
    HmSyusu As Long                                 ' [HM]週数(第n週)
    HmYobi As Long                                  ' [HM]曜日(0=日、1=月、2=火〜6=土)
    SyukuNm As String                               ' 祝日名
    StrYear As Long                                 ' 開始年(西暦)
    EndYear As Long                                 ' 終了年(西暦)
End Type
'---------------------------------------------------------------------------------------------------
' 祝日パラメータ月別配置テーブル用ユーザー定義
Private Type g_typParamMMPos
    StrIx As Long                                   ' 当月開始位置INDEX(祝日無しは-1)
    EndIx As Long                                   ' 当月終了位置INDEX(祝日無しは-1)
End Type
'---------------------------------------------------------------------------------------------------
' 振替休日・国民の休日判定対象テーブル用ユーザー定義
Private Type g_typFuriDIx
    CalIx As Long                                   ' カレンダーINDEX
    Syubetsu As Long                                ' 0=振替休日、1=国民の休日
End Type
'===================================================================================================
' 祝日パラメータテーブル(全件)
Private g_tblParamater() As g_typParamater          ' 祝日パラメータテーブル
'---------------------------------------------------------------------------------------------------
' 祝日パラメータ配置テーブル(このテーブルは月をINDEXとするため1オリジン)
Private g_tblParamMMPos(1 To 12) As g_typParamMMPos ' 祝日パラメータ月別配置テーブル

'***************************************************************************************************
'   ■■■ プロパティ(Friend) ■■■
'***************************************************************************************************
'   本クラスのバージョン(String)
'---------------------------------------------------------------------------------------------------
Friend Property Get Version() As String
    Version = g_cnsCalendarVersion
End Property

'===================================================================================================
'   バージョン更新日(Date)
'---------------------------------------------------------------------------------------------------
Friend Property Get VerUpdDate() As Date
    VerUpdDate = g_cnsCalendarVerUpdDate
End Property

                                             ・
                                             ・
                                          《中略》
                                             ・
                                             ・

'***************************************************************************************************
'* 処理名 :GP_MakeHoliParameter
'* 機能  :祝日パラメータテーブルの作成
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月17日
'* 作成者 :井上 治
'* 更新日 :2018年12月18日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub GP_MakeHoliParameter()
    '-----------------------------------------------------------------------------------------------
    Dim lngIxTbl As Long                                            ' テーブルINDEX
    Dim blnRet As Boolean                                           ' 処理成否
    Dim strErrMSG As String                                         ' エラーメッセージ
    ' 祝日パラ月別範囲テーブルを一旦初期化
    For lngIxTbl = 1 To 12
        With g_tblParamMMPos(lngIxTbl)
            .StrIx = -1
            .EndIx = -1
        End With
    Next lngIxTbl
    ReDim g_tblParamater(0)
    '-----------------------------------------------------------------------------------------------
    ' URLか
    If UCase(Left(g_cnsSyukuParaPath, 4)) = "HTTP" Then
        ' 祝日パラメータテーブルの作成(URLより)
        blnRet = FP_MakeHoliParameter1(strErrMSG)
    Else
        ' 祝日パラメータテーブルの作成(ファイルより)
        blnRet = FP_MakeHoliParameter2(strErrMSG)
    End If
    ' 失敗か
    If Not blnRet Then
        strErrMSG = strErrMSG & vbCrLf & vbCrLf & "※作成するカレンダーには祝日が反映されません。"
        MsgBox strErrMSG, vbCritical
    End If
End Sub

'***************************************************************************************************
'* 処理名 :FP_MakeHoliParameter1
'* 機能  :祝日パラメータテーブルの作成(URLより)
'---------------------------------------------------------------------------------------------------
'* 返り値 :処理成否(Boolean)
'* 引数  :Arg1 = エラーメッセージ(String)                    ※Ref参照
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年12月18日
'* 作成者 :井上 治
'* 更新日 :2018年12月18日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Function FP_MakeHoliParameter1(ByRef strErrMSG As String) As Boolean
    '-----------------------------------------------------------------------------------------------
    Const cnsCharSet As String = "Shift-JIS"
    Dim objHttp As MSXML2.XMLHTTP60                                 ' MSXML2.XMLHTTP
    Dim objStream As ADODB.Stream                                   ' ADODB.Stream
    Dim lngIx As Long                                               ' テーブルINDEX
    Dim strRet As String                                            ' 受け取り文字列
    Dim vntRet As Variant                                           ' 受け取り値
    FP_MakeHoliParameter1 = False
    On Error GoTo MakeHoliParameter1_ERROR
    ' URLから読み込み
    Set objHttp = New MSXML2.XMLHTTP60
    ' 同期通信を設定
    objHttp.Open "GET", g_cnsSyukuParaPath, False
    ' 要求を送信
    objHttp.send vbNull
    ' 読み込み待ち
    Do While objHttp.Status < 4
        DoEvents
    Loop
    ' Streamに読み込む
    Set objStream = New ADODB.Stream
    With objStream
        .Open
        .Position = 0
        .Type = adTypeBinary
        .Write objHttp.responseBody
        .Position = 0
        .Type = adTypeText
        .Charset = cnsCharSet
        strRet = .ReadText
        .Close
    End With
    Set objStream = Nothing
    Set objHttp = Nothing
    ' 改行(LFのみ)で分解
    vntRet = Split(strRet, vbLf)
    lngIx = 0
    ' 全件繰り返す
    Do While lngIx <= UBound(vntRet)
        ' 祝日パラメータテーブル要素追加
        Call GP_ApendHoliParam(Trim(vntRet(lngIx)))
        ' 次へ
        lngIx = lngIx + 1
    Loop
    FP_MakeHoliParameter1 = True
    On Error GoTo 0
    Exit Function

'===================================================================================================
MakeHoliParameter1_ERROR:
    strErrMSG = Err.Description
    On Error GoTo 0
End Function

'***************************************************************************************************
'* 処理名 :FP_MakeHoliParameter2
'* 機能  :祝日パラメータテーブルの作成(ファイルより)
'---------------------------------------------------------------------------------------------------
'* 返り値 :処理成否(Boolean)
'* 引数  :Arg1 = エラーメッセージ(String)                    ※Ref参照
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年12月18日
'* 作成者 :井上 治
'* 更新日 :2018年12月18日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Function FP_MakeHoliParameter2(ByRef strErrMSG As String) As Boolean
    '-----------------------------------------------------------------------------------------------
    Dim objFso As FileSystemObject                                  ' FileSystemObject
    Dim objTs As TextStream                                         ' TextStream
    FP_MakeHoliParameter2 = False
    On Error GoTo MakeHoliParameter2_ERROR
    ' 祝日パラメータファイルの読み込み
    Set objFso = New FileSystemObject
    Set objTs = objFso.OpenTextFile(g_cnsSyukuParaPath, ForReading, False, TristateFalse)
    ' 最終行まで繰り返す
    Do Until objTs.AtEndOfStream
        ' 祝日パラメータテーブル要素追加
        Call GP_ApendHoliParam(Trim(objTs.ReadLine))
    Loop
    objTs.Close
    Set objTs = Nothing
    Set objFso = Nothing
    FP_MakeHoliParameter2 = True
    On Error GoTo 0
    Exit Function

'===================================================================================================
MakeHoliParameter2_ERROR:
    strErrMSG = Err.Description
    On Error GoTo 0
End Function

'***************************************************************************************************
'* 処理名 :GP_ApendHoliParam
'* 機能  :祝日パラメータテーブル要素追加
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :Arg1 = 祝日パラメータレコード(String)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2018年09月17日
'* 作成者 :井上 治
'* 更新日 :2018年12月18日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:テーブルINDEXは本処理側で加算されます
'***************************************************************************************************
Private Sub GP_ApendHoliParam(ByVal strHoliPara As String)
    '-----------------------------------------------------------------------------------------------
    Static lngIxTbl As Long                                         ' テーブルINDEX
    Dim lngGetsu As Long                                            ' 月
    ' ブランク(最終行)は除外
    If strHoliPara = "" Then Exit Sub
    lngGetsu = CLng(Left(strHoliPara, 2))
    ReDim Preserve g_tblParamater(lngIxTbl)
    ' 祝日パラ月別範囲テーブルを更新
    With g_tblParamMMPos(lngGetsu)
        ' 開始位置
        If .StrIx < 0 Then .StrIx = lngIxTbl
        .EndIx = lngIxTbl
    End With
    ' 祝日パラメータテーブル要素追加
    With g_tblParamater(lngIxTbl)
        .Getsu = lngGetsu
        .SyoriKbn = CLng(Mid(strHoliPara, 3, 1))
        .Hiduke = CLng(Mid(strHoliPara, 4, 2))
        .FurikaeKbn = CLng(Mid(strHoliPara, 6, 1))
        .HmSyusu = CLng(Mid(strHoliPara, 7, 1))
        .HmYobi = CLng(Mid(strHoliPara, 8, 1))
        .StrYear = CLng(Mid(strHoliPara, 9, 4))
        .EndYear = CLng(Mid(strHoliPara, 13, 4))
        .SyukuNm = Mid(strHoliPara, 17)
    End With
    ' テーブルINDEXを加算
    lngIxTbl = lngIxTbl + 1
End Sub

'----------------------------------------<< End of Source >>----------------------------------------
説明したいのは「祝日パラメータテーブルの作成(GP_MakeHoliParameter)」ですが、 実際にはクラスの先頭で宣言しているファイルパスの先頭が「HTTP」で始まるかどうかで処理を分けており、 HTTPで始まる場合は「MSXML2.XMLHTTP60」「ADODB.Stream」を使う処理、 そうでない場合は「FileSystemObject」でファイルを読み込む処理へと分岐させています。
どちらも読み込んだ後は改行で分断される行ごとに「祝日パラメータテーブル要素追加(GP_ApendHoliParam)」を呼び出して、 行内を指定の桁ごとに分割させて祝日パラメータテーブルへ追加を行なっています。

ExcelワークブックであればWebサイト(HTTP)上のものであってもそのままExcelで開くことができますが、 テキストファイルの場合はFileSystemObjectではWebサイト(HTTP)上のものを扱うことができないので このような方法になっています。
(転用利用される場合は先頭コメントにある「参照設定」にご注意下さい)