ダウンロード (マクロ使用分:スケジュール_ガントチャート_カレンダー.xlsm と 非使用分:スケジュール_ガントチャート.xlsx) WBSガントチャートをExcelで作ってみた というページからダウンロードできる Excel はとても使いやすく( 2か月の表示 )単純にできていました。( 2013年08月30日 で更新が止まっています ) さっそく使ってみましたが、少し問題点があったので『修正』と『追加仕様』を行いました。 1) Workday 関数の使い方が、金曜で日数が終わった場合に土日を含んだ完了日になっていたので修正 2) 日付の入力が、手入力なので VBA の Form + DTPicker でカレンダー入力を可能にした 1) の修正は以下のページを参考にしました Excel2010:土日なら前の平日を返す(WORKDAY関数・WEEKDAY関数 ) 2) の追加仕様は、Form と DTPicker を使用しましたが、VBA におけるイベント処理を詳細にコントロールする術が無く、Form で何をしても選択されている日付をセルに転送するようになっています。 ただ、対象列以外でカレンダーボタンをクリックした場合はエラーにしています。 また、Formを開いた時に DTPicker を開かせる為に SendKeys を使用しているのですが、Numlock が OFF になるバグがあったので、以下のページのコードを利用して対処しました。 VBAの「Sendkeys」についての質問です。 UserForm1
Private Sub DTPicker1_CloseUp() ActiveCell.Value = DTPicker1.Value Unload UserForm1 End Sub Private Sub UserForm_Initialize() Call saveNumLock SendKeys ("%{DOWN}") Call numLockCheck End Sub
Module1
Private Declare Sub keybd_event Lib "user32" _ (ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Declare Function GetKeyboardState Lib "user32" _ (pbKeyState As Byte) As Long Const VK_NUMLOCK = &H90 '「NumLock」キー Const KEYEVENTF_EXTENDEDKEY = &H1 'キーを押す Const KEYEVENTF_KEYUP = &H2 'キーを放す Dim NumLockState As Boolean Dim keys(0 To 255) As Byte Sub カレンダー参照_Click() Dim no no = ActiveCell.Column If no <> 5 Then MsgBox ("開始日のセルを選択してください") Exit Sub End If UserForm1.Show End Sub Sub saveNumLock() GetKeyboardState keys(0) NumLockState = keys(VK_NUMLOCK) End Sub Sub numLockCheck() '「NumLock」キーがオンだった場合はオンにする。 If NumLockState Then 'キーを押す keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0 'キーを放す keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0 End If End Sub
使用方法開始と休日設定に、開始日と休日を設定します(土曜と日曜は休日なのでそれ以外の非稼働日です) ガントチャートの開始日に日付を入力して、工数に日数を入力します 日付は、月から入力すると現在の年になります 現在以外の年を使用する場合は、18/12/1 のように年の下2桁を最初に入力します カレンダーボタンで日付を参照できます カレンダーはただ閉じても日付は選択されます