項目 | 内容 |
---|---|
日付セルの指定 | 日付セルは予め呼び出しワークブック側のソースコードで指定する仕組みです。 ですから若干のソースコードの作成が必要になりますが、下記のサンプルで説明する程度の簡単なものです。 これらにより「日付セル」として指定されたセルだけカレンダーが表示され、それ以外のセルではカレンダーは表示されません。 |
呼び出し方法 | 日付セルをマウスでダブルクリックするか、日付セルを選択した状態でF4キーを押すことでカレンダーが表示されます。 本プログラムのカレンダーでの日付入力はあくまで「入力補助」であり「強制」ではありません。 Excelではセルに対して「月日」のみの入力で「年」を含めた日付が入力できるためこのようなカレンダーでの日付入力はニーズが薄いと思われがちですが、 年末年始近辺での作業で「月日」のみの入力でよく誤りが起きることはご存じだと思います。 ここでカレンダーでの日付入力を通常に運用されていればこのような誤りは軽減されるでしょう。 |
カレンダー上での操作 | カレンダー上で所望する日付をクリックするか、青反転の日付カーソルを上下左右の矢印キーで移動させてEnterキーを押すことで
日付が決定され日付セルにその日付が入力され、カレンダーは閉じられます。
カレンダーを表示させてから不要になった場合は右上の×ボタンかEscキーで閉じられます。 この他年月の切り替えなどを含めてキーボードでの操作にも留意しており、青反転の日付カーソルを上下左右の矢印キーで移動させる時に現在表示月の範囲を超える場合は 自動的に年月が変更されるなどの対応を行なっています。それぞれは次の表で説明します。 |
カレンダーの表示位置 | カレンダーは上記画像のように呼び出した日付セルの直下に表示されます。 この状態でカレンダーがディスプレィスクリーンからはみ出してしまう場合は直上に表示されます。 |
表示初回年月 | 日付セルからカレンダーが呼び出された初回は、日付セルに既に日付が入力されている場合はその日付の年月が選択された状態で表示され、 日付セルに日付が入力されていない場合は処理日(システム日付)の年月が選択された状態で表示されます。 |
表示年月の変更 | カレンダー上部の年月表示からの変更は、カレンダー上部左右の矢印(←、→)の他、 カレンダー上部の年月表示の「年」「月」をマウスでクリックするとプルダウンが表示されるので、直接「年」「月」を変更することも可能です。 キーボードからの年月変更については次の表で説明します。 |
曜日並びの変更 | 曜日並びはデフォルトでは上の画像のように一般的なカレンダーと同じで日曜日が左端となる順序ですが、サンプルからコピーしていただく定数の変更だけで 月曜日が左端となる順序に変更できます。 |
祝日の表示 | 本プログラムのカレンダーは日本の政令での祝日に対応しており、祝日は上の画像で見られるように赤字で表示されます。
この赤字の日付をマウスでポイントすると祝日名がカレンダー下部のステータス領域に表示されます。 2019~2021年は天皇誕生日の変更や東京五輪による祝日移動、さらには東京五輪延期による移動などがあり、 本カレンダーもそれらの祝日にも対応しております。 アドインにしたことによる祝日処理への影響は利点・欠点が共にあり、下記で説明しています。 |
押下キー | 動作機能 |
---|---|
→、Tab、+、6(テンキー) | 翌日に移動します。(表示範囲を超えると自動的に翌月に移動します。) |
←、Shift+Tab、-、4(テンキー) | 前日に移動します。(表示範囲を超えると自動的に前月に移動します。) |
↓、2(テンキー) | 翌週の同曜日に移動します。(表示範囲を超えると自動的に翌月に移動します。) |
↑、8(テンキー) | 前週の同曜日に移動します。(表示範囲を超えると自動的に前月に移動します。) |
Home | 表示月の月初(1日)に移動します。 |
End | 表示月の月末(末日)に移動します。 |
PageDown | 翌月に移動します。 |
PageUp | 前月に移動します。 |
F12 | 翌年同月に移動します。 |
F11 | 前年同月に移動します。 |
Enter | 日付を決定してカレンダー入力フォームを閉じます。 |
Esc | キャンセルしてカレンダー入力フォームを閉じます。 |
優劣 | 項目 | 内容 |
---|---|---|
利点 | 必要VBA知識 | カレンダーに関する主たる機能部分を全てアドインに収容してブラックボックス化し、利用ワークブックに対しては必要機能を「関数」として提供しているので、
アドイン呼び出しと「関数」利用部分についてサンプルを元に組み込んでいただくことで、簡単に機能するようにできると思います。 VBAの知識はある程度必要ですが、サンプルのソースコードもほとんどはそのままコピーするだけで良く、ワークシート関連での変更箇所はコピーのままで良いところと分けて明記してあります。 |
実装作業 | カレンダーの呼び出し部分は呼び出し元のワークブック側に実装する必要がありますが、前頁のように全機能を実装するのではなく、
呼び出し部分のみなので実装のための作業が大幅に少なくて済みます。 カレンダー機能を実装したいワークブックが多数ある場合などは作業コストの軽減にも繋がります。 |
|
アドインの配置先 | 「主機能をアドイン化する」という時点で「ではアドインはどこに置くのか」という新たな選択肢が発生します。 提供サンプルのままだと、アドインは利用ワークブックと同じフォルダに配置することになりますが、 社内ネットワークが完備している環境であれば配置先(パス)を明示しての社内での一元化も可能です。 利用ワークブックからアドインが参照できない場合は、当サイトからWeb参照されるようになっています。 |
|
祝日情報の管理 | 上記と重複しますが、祝日法の改正などの対応についてもアドインが社内で一元化できていれば、 一元化された場所のアドインを最新に置き換える(上書きコピー)だけで対応できます。 | |
バージョン更新 | 上記同様にこれらの機能改廃(不具合対応含む)についても 一元化された場所のアドインを最新に置き換える(上書きコピー)だけです。 社内に新旧のバージョンが混在するような状況も避けられます。 | |
欠点 | レスポンス | 初回にカレンダー等の本機能を呼び出す時に裏でアドインファイルが開かれるため、この初回に限って若干動作レスポンスが悪くなります。
実際の動作レスポンスについては前頁のサンプルと比べてご確認下さい。 元々、アドイン化を対応から外していたのはこの動作レスポンスを考えてのことでしたが、現在の事務用の主力PCであれば初回のカレンダー起動で秒単位に待たされるようなことはありませんでした。 |
祝日パラメータ | 前頁での説明は「祝日パラメータ」については利用者側で変更ができるとしていましたが、
今回のアドインについては内部非公開であり、かつ「祝日パラメータシート」を使わない方法としています。 これは多分に動作レスポンスを意識してのものですが、ソースコード非公開については「VBA初心者向け」での配慮でもあります。 |
|
対応範囲 | 前頁のものはワークシートの他、ユーザーフォームでの利用に対応していましたが、
アドインに関しては現在の実装上でワークシートの対応のみとしています。 ユーザーフォームで利用される方はそもそもVBAの知識もある程度お持ちであろうと考えますので、 前頁のサンプルでの方法をご検討下さい。 |
|
環境設定 | アドインを配置するフォルダを「信頼できる場所」に登録するなどセキュリティ上の設定が必要になります。 |
'***************************************************************************************************
' カレンダーフォーム関連モジュール ※modAboutCalendar6(Module)
'
' 参照設定:Microsoft Scripting Runtime
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'23/01/22(2.00)新規作成(シート上でのキー入力に対するカレンダー表示機能追加の対応)
'***************************************************************************************************
Option Explicit
Option Private Module
'===================================================================================================
' カレンダー表示関連定数(公開)
'---------------------------------------------------------------------------------------------------
' カレンダーアドイン所在フォルダ名(ブランクの場合は本ブックのフォルダ)
Private Const g_cnsAddinPath As String = ""
' カレンダーフォームのタイトル
Private Const g_cnsCalCaption As String = "日付選択"
' カレンダーフォームの週開始曜日(1=日曜日、2=月曜日)
Private Const g_cnsStartYobi As Integer = 1 ' 日曜日
'Private Const g_cnsStartYobi As Integer = 2 ' 月曜日
'###################################################################################################
' ※ここから下は一切変更せずにご利用下さい。
'###################################################################################################
・
・
・
'----------------------------------------<< End of Source >>----------------------------------------
定数 | 内容 |
---|---|
g_cnsAddinPath |
アドインの配置先フォルダのフルパスを指定する項目です。 このようにブランクとする場合は実行するワークブックと同じフォルダでアドインを開く動作になります。 この指定箇所にアドイン「AddinCalendar6R.xlam」が存在しない場合は、当サイトからWeb参照で開くように動作します。 アドインの配置先フォルダはExcelのトラストセンターで「信頼できる場所」に登録して下さい。 |
g_cnsCalCaption |
実行時に表示されるカレンダーフォームのタイトルです。 |
g_cnsStartYobi |
実行時に表示されるカレンダーフォームの開始曜日の指定です。
「2」に変更すると月曜日始まりになります。
「2」以外は全て日曜日始まりです。 |
'***************************************************************************************************
' カレンダーフォーム表示テスト Sheet1(Class)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'23/01/22(2.00)新規作成
'***************************************************************************************************
Option Explicit
'===================================================================================================
' シート上の日付セルアドレス
Private Const g_cnsDateCellAdress = "$A$1,$A$9,$D$13,$B$17,$G$18,$E$21,$C$25,$H$27:$I$28,$F$30"
'###################################################################################################
' ※ここから下は一切変更せずにご利用下さい。
'###################################################################################################
・
・
・
'----------------------------------------<< End of Source >>----------------------------------------
' シート上の日付セルアドレス
Private Const g_cnsDateCellAdress = "$B$2:$B$1048576,$E$2:$E$1048576"
'***************************************************************************************************
' カレンダーフォーム表示テスト ※ThisWorkbookイベント(Class)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'23/01/22(2.00)新規作成
'***************************************************************************************************
Option Explicit
'***************************************************************************************************
' ■■■ ワークブックイベント ■■■
'***************************************************************************************************
'* 処理名 :Workbook_Open
'* 機能 :開くイベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(既定)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2023年01月22日
'* 作成者 :井上 治
'* 更新日 :2023年01月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Workbook_Open()
'-----------------------------------------------------------------------------------------------
Dim dteHoliUpdate As Date ' 祝日情報更新日
Dim dteAddinUpdate As Date ' アドイン更新日
Dim strAddinVersion As String ' アドインバージョン
' カレンダーバージョン取得
Call modAboutCalendar6.GetCalendarVer(dteHoliUpdate, strAddinVersion, dteAddinUpdate)
' ※この記述は本サンプル限定⇒必須ではありません
' カレンダーフォームの表示シート
With ThisWorkbook.Worksheets(1)
.Select
.Protect UserInterfaceOnly:=True
.Cells(1, 7).Value = "祝日パラメータ更新日:" & Format(dteHoliUpdate, "yyyy/MM/dd")
.Cells(2, 7).Value = "カレンダーモジュールVer:" & strAddinVersion & _
"(" & Format(dteAddinUpdate, "yy/MM/dd") & ")"
End With
' 保存済みにする
ThisWorkbook.Saved = True
End Sub
'###################################################################################################
' ※ここから下は一切変更せずにご利用下さい。
'###################################################################################################
・
・
・
'----------------------------------------<< End of Source >>----------------------------------------
←ExcelCalendar6.zip (199KB) |
Vectorからも「カレンダー入力フォーム(Calendar6:アドイン版)」でダウンロードできます。