役に立つか?VBAメモ

仕事で使ったVBAをメモっとく

カレンダーつづき

f:id:jus7733:20141128101200j:plain

カレンダー作成担当者です。

カレンダーは出来ましたが、なんとも味気ないし、月の並び方が気に食わなかったです(私だけ?)。
そこで月の並びを冒頭のように3ヶ月毎に横にしました。
また、表題部にはフォントを大きくし、元号表記も追加しました。

元号表記も自動で変わっていくようにセルの書式設定からユーザー定義を選び
"("[$-411]ggge"年)"
とします。書式だけではちゃんと出ないのでセルには「=VALUE($B$1&"/1/1")」を入力します。
会社用なので社名等々も入れておきます。

また会社用で従業員に配りますので、休業日はわかりやすく更に稼動日と休日の日数を表記します。
休業日は赤塗り潰しにしました。これは大した作業ではないので手作業です。

次に稼動日と休業日の日数を数えて表示しますが、これが面倒です。

最初に案を出して、各部署を回ってるあいだや承認確定後では結構休業日が変わっていたりします。
その都度数え直しをしていては間違えてしまいます。いや過去に間違えました・・・
そこで下記のユーザー関数の出番です。

色付きセルの数を数える関数です。
エクセル術 http://excel-magic.com/post-42/
を参考にさせていただきました。

Function CountColor(計算範囲, 条件色セル)
  Application.Volatile
    CountColor = 0
      For y = 1 To 計算範囲.Columns.Count
        For x = 1 To 計算範囲.Rows.Count
   If 計算範囲.Rows(x).Columns(y).Interior.ColorIndex = 条件色セル.Interior.ColorIndex Then CountColor = CountColor + 1
  End If
     Next
        Next
End Function

ユーザー関数は自動計算してくれないので” Application.Volatile”を書入れ、下記を登録しておくといいでしょう。
毎回キーを押さなくて済みます。

Sub 再計算()
  Application.CalculateFull
End Sub

これらを標準モジュールに登録し、セルに数式を入れていきます。
休業日日数のセルには「COUNTCOLOR(範囲,検索色)」を記入します。
1月なら=COUNTCOLOR(C8:I13,C10)になります。

稼動日は単純にCOUNT(範囲)-休業日日数を記入します。
1月なら=COUNT(C8:I13)-I14になります。

これならあれこれ案を変更されても対応が簡単ですね。