プロが教える店舗&オフィスのセキュリティ対策術

シートが31枚あり、シート名がそれぞれ1日~31日となっており(内容は31枚とも同じ内容) シート名の日付が土曜日なら青、日曜日か祝日なら赤。
というふうに自動で見出しの色を変更したいのですが可能でしょうか?
またどのようにマクロを組めばいいかご教示頂ければ幸いです。

Excel2013を使用しております
宜しくお願いします。

A 回答 (3件)

こんにちは!



>シートが31枚あり、シート名がそれぞれ1日~31日となっており・・・
月が替わるたびに同じシートを使いまわすのですかね?

大の月・小の月の兼ね合いがあると思いますので
とりあえず、月末までのシートの処理としてみました。(小の月の場合は30番目、2月は28または29番目まで)
マクロを実行した日の「月」に準じています。

標準モジュールにしてください。

Sub Sample1()
Dim k As Long, myDay As Date, myWk
For k = 1 To Day(WorksheetFunction.EoMonth(Date, 0))
With Worksheets(k)
myDay = DateSerial(Year(Date), Month(Date), Val(Replace(.Name, "日", "")))
myWk = WorksheetFunction.Weekday(myDay)
Select Case myWk
Case 1
.Tab.ColorIndex = 3
Case 7
.Tab.ColorIndex = 5
Case Else
.Tab.ColorIndex = xlNone
End Select
End With
Next k
End Sub

※ シート名は必ず「1日・2日・・・31日」となっているという前提です。

>祝日なら赤。
に関しては祝日データがどこにあるか?によってコードが変わってきますので、
今回は考慮していません。m(_ _)m
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます!他の御二方も含め大変参考になりました~

お礼日時:2018/03/07 15:58

マクロ使わなくても条件付き書式でセルを修飾すれば良いだけですよ。



シート名もCELL関数を使って取得することができます。(FIND関数やMID関数などを使って切り出す必要がありますけどね)
あとは得られたシート名を日付に直してWEEKDAY関数に入れれば曜日を得る事ができます。
その結果を土曜日の場合の値と比較することで、その日付が土曜日かを判断できます。

一度CELL関数などの使い方を調べてみましょう。


・・・余談・・・
代わりに作ってもらう事は疑問の解決ではなく先送りにしかなりません。
自作するうえで何が分からないのかを確認し、理解するための質問をするようにしましょう。

この質問に対する回答は、
 「マクロを使わなくても、条件付き書式でできますよ」
ということです。
それを実現するためのヒントも書きましたので、あとは自身の努力を見せる番です。

「CELL関数の2番目の項目は何を指定すればいいのか分からない」
など、具体的な補足なら時間が空いてもお答えしますよ。
(返答にはちょっと時間がかかると思いますけどね)
    • good
    • 2

こんにちは



>シート名がそれぞれ1日~31日となっており
どのようなマクロにしたいのかよくわかりませんが、自動で曜日を判定させたいのなら、日付だけの情報では無理ですね。

>どのようにマクロを組めばいいかご教示頂ければ幸いです
以下のような処理を、各シートでループすれば可能と思います

1)シートの表す日付を特定(上記のように方法は不明)
2)年月日から曜日を特定する
 MsgBox Weekday(dt) で可能です(dt:Date型の日付)
 (1~7の値をとり、日曜~土曜を意味します)
3)曜日に応じて、見出しに色を付ける

※ 3)の方法は、マクロの記録などで試してみればわかると思います。
※ 確実に1日~順に並んでいる保証があれば、『最初のシートの曜日をチェックして、対象日(=シート)を計算で求め、7シートおきにまとめて色付けする』といった方法も考えられそう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A