Excelのマクロについての質問です。

初歩的な質問で、あまりポイントを多く付与できませんが急ぎの質問なので是非ご回答ください。
今、一つのブックに1~31(日付)のシートがあり、I1:I3(セルが連結されているのでこう表記していますが実際にはI1で良いのでしょうか?それも併せて知りたいです。)に
=VALUE("h"&C1&"/"&E1&"/"&G1)
という数式が入力されています。
これは、年(C1)月(E1)日(G1)から曜日を生成する式なのですが、この結果が土日の時に、シートの見出しの色を変えるため、以下のようなマクロを参考にしました。
Option Explicit

Sub Change_SheetTabColor()
'シートタブの色を、セルD3の値が土曜日なら青色に、日曜日・祝日なら赤色にするマクロ
Dim ws As Worksheet

For Each ws In Worksheets
ws.Select

If Range("I1:I3").Value = "日" Then
Sheets(ws.Name).Tab.ColorIndex = 3
ElseIf Range("I1:I3").Value = "土" Then
Sheets(ws.Name).Tab.ColorIndex = 5
End If

Next ws
End Sub
これを実行すると実行時エラー13 型が一致しませんと出ます。
これを解消する方法を教えてください。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/03/25 18:45:40
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:snow0214 No.2

回答回数470ベストアンサー獲得回数116

ポイント350pt

まずI1に代入式は次のようにしてください。

=TEXT(C1 & "/" & E1 & "/" & G1,"aaa")

次にマクロは次のようにしてください。
セル結合したところは、"I1:I3" ではなくて "I1:I1" でないと参照できません。

Option Explicit

Sub Change_SheetTabColor()
'シートタブの色を、セルD3の値が土曜日なら青色に、日曜日・祝日なら赤色にするマクロ
Dim ws As Worksheet

For Each ws In Worksheets
    ws.Select
    If Range("I1:I1").Value = "日" Then
        Sheets(ws.Name).Tab.ColorIndex = 3
    ElseIf Range("I1:I1").Value = "土" Then
        Sheets(ws.Name).Tab.ColorIndex = 5
    End If
Next ws
End Sub

その他の回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント150pt

こんな感じで、どうでしょう。

Dim ws As Worksheet
Dim youbi As String

For Each ws In Worksheets
    
    youbi = Format(ws.Range("I1").Value, "aaa")
    
    If youbi = "日" Then
        ws.Tab.ColorIndex = 3
    ElseIf youbi = "土" Then
        ws.Tab.ColorIndex = 5
    Else
        ws.Tab.ColorIndex = xlColorIndexNone
    End If

Next ws

ws.Select は邪魔くさいと思うので外しましたが、必要ならつけてください。
元の色に戻すロジックが無かったので、足してみました。

id:snow0214 No.2

回答回数470ベストアンサー獲得回数116ここでベストアンサー

ポイント350pt

まずI1に代入式は次のようにしてください。

=TEXT(C1 & "/" & E1 & "/" & G1,"aaa")

次にマクロは次のようにしてください。
セル結合したところは、"I1:I3" ではなくて "I1:I1" でないと参照できません。

Option Explicit

Sub Change_SheetTabColor()
'シートタブの色を、セルD3の値が土曜日なら青色に、日曜日・祝日なら赤色にするマクロ
Dim ws As Worksheet

For Each ws In Worksheets
    ws.Select
    If Range("I1:I1").Value = "日" Then
        Sheets(ws.Name).Tab.ColorIndex = 3
    ElseIf Range("I1:I1").Value = "土" Then
        Sheets(ws.Name).Tab.ColorIndex = 5
    End If
Next ws
End Sub

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません