こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルで土曜日、日曜日、祝日に色付けする。

縦に日、横に月を入れた1年間の実績表があります。
土曜日、日曜日、祝日はカーソルに自動で色付けしたい。
条件は
1、ピボットテーブルで集計した表です。
2、1シートに複数の同一レイアウトの表があります。
 したがって表ごとに範囲指定した表に色付けしたい。
  表の上段にはタイトルを書く必要があるので数行空けて作成
3、年度を指定して色づけしたい。
4、色は土曜日が緑、日曜日が黄色、祝日が青
5、月は横に1月~12月です。
  エクセル機能で出来ない場合はVBAでも良いです。
 よろしくお願いします。

投稿日時 - 2017-12-07 13:53:44

QNo.9405304

困ってます

質問者が選んだベストアンサー

条件付書式設定でWeekday関数を指定するとできますが祝日はできません。
祝日もこだわるのであれば、別シートに日付データを作って、独自の戻り値を付けLookup関数で戻り値を算出すれば出来るのだと思います。

Weekday(日付)の戻り値は、日曜日が1、土曜日が7、というように、日曜日から土曜日を1から7の数字で返します。条件付書式設定の条件にこの数字と色を指定することで分岐可能となります。

投稿日時 - 2017-12-07 15:11:21

お礼

早速いろいろい試してみます。
アドバイスありがとうございました。

投稿日時 - 2017-12-08 08:08:37

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

回答No.4の追加です。
VBAによる処理でアクティブセルのみを対象にしたセルの塗りつぶしです。
アクティブセルの移動はカーソルキーまたはマウスクリックで変更できますが何れの場合でも同様になります。
対象範囲はC8:N38にしてあり、祝日一覧はQ8:Q38で空欄もありますので特例の休日を追加できます。
コードは添付画像にも表示してありますが次のようになります。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i
Dim a, c, r, di, wi
Range("c8:n38").Interior.ColorIndex = xlNone
a = ActiveCell.Address
c = ActiveCell.Column
r = ActiveCell.Row
i = ActiveCell.Offset(0).Value
If r > 7 And r < 39 And c > 2 And c < 15 Then
di = DateSerial(2017, Cells(7, c), Cells(r, 2))
wi = Weekday(di)
If wi = 1 Then Range(a).Interior.ColorIndex = 6
If wi = 7 Then Range(a).Interior.ColorIndex = 4
n = 0
For Each r In Range("Q8", "Q38")
If di = r Then n = n + 1
Next
If n > 0 Then Range(a).Interior.ColorIndex = 8
End If
End Sub

アクティブセルの移動でコードが実行され、最初にC8:N38の塗りつぶしをキャンセルして移動先の位置から該当日付を算出して曜日が土または日のとき指定の色で塗りつぶします。
次に、祝日一覧と比較して一致するときは祝日の指定色で塗りつぶします。
貼付画像はExcel 2013で検証した結果です。
アクティブセルはD18(2017/2/11)なので祝日(建国記念の日)となり水色を指定しました。(青系の淡い色が良いと判断しました)

投稿日時 - 2017-12-08 14:14:28

ANo.4

>早速試してみます。
回答No.3では具体的な処理方法を提示しませんでしたが何を試すのでしょう?
条件付き書式で該当日のセルを指定の色に塗りつぶすのであれば以下の方法で良いと思います。
設定範囲 C8:N38
条件 数式を使用して、書式設定するセルを決定
土曜日の数式
=AND(WEEKDAY(DATE(2017,C$7,$B8))=7,DATE(2017,C$7,$B8)<=EOMONTH(DATE(2017,C$7,1),0))
日曜日の数式
=AND(WEEKDAY(DATE(2017,C$7,$B8))=1,DATE(2017,C$7,$B8)<=EOMONTH(DATE(2017,C$7,1),0))
祝日の数式(祝日一覧はQ列に登録する)
=COUNTIF($Q$8:$Q$38,DATE(2017,C$7,$B8))
Excel 2013で検証した結果は添付画像のとおりです。

投稿日時 - 2017-12-08 12:30:45

ANo.3

>土曜日、日曜日、祝日はカーソルに自動で色付けしたい。
Excelで「カーソルに色を付ける」と言う機能はありません。
「セルの塗りつぶし」のことでしたら条件付き書式で可能かと思います。
しかし、該当セルが土曜日でアクティブセルのときだけ「そのセルを緑色に塗りつぶす」というのは経験がありません。

>エクセル機能で出来ない場合はVBAでも良いです。
前述のようにアクティブセルに対してのみを対象にした条件付き書式は無いと思いますので、VBAでの処理が可能か否か調査に時間が掛かります。
また、要件が的を射ていないと無駄になりますので、質問の文言を見直して補足してください。

投稿日時 - 2017-12-07 18:46:35

お礼

ありがとうございました。
早速試してみます。

投稿日時 - 2017-12-08 08:10:28

ANo.2

「条件付き書式」という機能と、いくつかの関数で可能ですよ。
足りない情報があるのでズバリなアドバイスはできませんが、
以下、参考までにどうぞ。

使う機能:条件付き書式
使う関数:DATE、WEEKDAY、AND、COUNTIF
     (場合によっては)INDIRECT、ROW、COLUMN など
用意するもの:祝日一覧(添付図のQ:R列の体で)
       「年」を判定するセル(添付図だとB6セルのように)
知っていると得する言葉:絶対参照・相対参照

とりあえず、図では「祝日に色を付ける」ところだけチラ見せです。


VBAを使わずとも「初歩的な機能だけでできます」から、
調べながらでも作ってみてください。
その上で解らないことがあれば
「こうしてみたが出来ない。どうすればいいか」と訊ねてもらえると
親切な回答がつきやすいようですよ。

投稿日時 - 2017-12-07 18:23:22

お礼

早速試してみます。
アドバイスありがとうございました。

投稿日時 - 2017-12-08 08:09:35

あなたにオススメの質問