スナックelve 本店

バツイチ40代女の日記です

No.1490 エクセルカレンダー その3 そしてマクロへ

移動前ブクマページ: https://b.hatena.ne.jp/entry/s/elve.hateblo.jp/entry/2018/02/13/200514

続くとは思わなかっただろ? 俺もだ

そんでですねーここで営業日数を数えてみよう! とか思うわけです。
考え方としては、範囲を指定してその範囲の文字が黒いところだけ数えれば良いのではないか、と。

ユーザー定義関数を作ってみる
えーっと、勘で使ってるので詳しいところはググってくれ(爆)

Function countBlack(r As Range)
    ret = 0
    For Each my_r In r
        If my_r <> "" And my_r.Font.Color = 0 Then
            ret = ret + 1
        End If
    Next
    countBlack = ret
End Function

こんな感じで作って

=countBlack(B3:H8)

って適当なセルに入力すれば・・・
f:id:elve:20180213194824p:plain

・・・21・・・なぜ・・・

というわけで調べると条件付書式ってfont.colorでは取得できないらしーのね~(font.colorでは24日は黒だと思っている)
んで、じゃーどうやって取得するのっつーとDisplayFormatっつーのを使うらしいのだ!! が!! これユーザー関数で使えないとか言ってるの!!

DisplayFormat プロパティはユーザー定義関数では機能しないことに注意してください。

Range.DisplayFormat プロパティ (Excel)

つーわけで、マクロになります・・・。*1マクロとユーザー定義関数の違いもよくわかってません・・・。勘で使ってます・・・。
FunctionをSubに書き換えて~

Sub countBlack()
    Worksheets("Sheet1").Select
    ret = 0
    For Each my_r In Range("B3:H8")
        If my_r <> "" And my_r.DisplayFormat.Font.Color = 0 Then
            ret = ret + 1
        End If
    Next
    Range("G1") = ret
End Sub

Alt+F8で実行できるので実行すると~
f:id:elve:20180213200113p:plain

20日ー。(いつの間にか前後に文字入ってるけど気にしない)
よかったねー。おめでとーおめでとー。ありがとーwwww


というわけで、今回は平日をカウントするカレンダーでした。
土日も文字色黒くすればカウントしますし、祝日はリスト編集で対応できるはずです

え? それでどうすんのって・・・いや・・・あの・・・。

ここここ今回のエクセルはここまでです!!!www
ファイル保存するときはマクロつきの形式(.xlsm)で保存しましょう!

後で検索する用

条件付書式の色を取得するにはDisplayFormatプロパティを使う

Functionでは動かない

Subにすること

*1:ユーザー定義関数もマクロらしい(;´Д`)よくわからん