• ベストアンサー

マクロでシートタブ色の変更

例えば、A1に数字が入ればシートタブが青色に、A1とA2に数字が入ればシートタブが黄色に、 A1とA2とA3に数字が入ればシートタブが赤色に、このようにするにはどのように記述したら良いでしょうか、よろしくお願いいたします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("A1:A3"), Target) Is Nothing Then Worksheets("Sheet1").Tab.ColorIndex = -4142 If Range("A1") <> "" And Range("A2") <> "" And Range("A3") <> "" Then Worksheets("Sheet1").Tab.ColorIndex = 3 ElseIf Range("A1") <> "" And Range("A2") <> "" Then Worksheets("Sheet1").Tab.ColorIndex = 6 ElseIf Range("A1") <> "" Then Worksheets("Sheet1").Tab.ColorIndex = 5 End If End If End Sub これで良いのかな。 ーー 結構、初心者には勉強点があるように思う。 (1)シートイベントというものの勉強 (2)マクロの記録でタブの色を変えるコードを勉強する また色を抹消するコードを勉強する。 (3)3つの場合の場合分け(条件の多いほうから聞く) (4)A1:A3以外は素通りさせる方が良いかな(ntersectの利用。これはIFでORを使っても出来る) 数字かどうかのチェックを略している(IsNumericで、使って追加してください) しかしこの質問のアイデアは珍奇で使えるのかな(今まで質問に出たこと無いような)。 Changeイベントを扱う難しさなどがある。上記コードでは多数例テストして無いので、出来るだけテストして見てください。

hoshi7777
質問者

お礼

ありがとうございました。ThisWorkbookで一部修正で出来るようになりました。 本当に助かりました。

hoshi7777
質問者

補足

ありがとうございます。この動作を全てのシートで動作させるにはどうすればいいでしょうか。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

ANo2です。 > ありがとうございます。この動作を全てのシートで動作させるにはどうすればいいでしょうか。 すべてのシートのシートモジュールに同じコードをはりつけるか、あるいは先ほどのシートのモジュールのコードを消して シートモジュールではなく、ThisWorkbookモジュールに Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)   Dim c   If Intersect(Target, Range("A1:A3")) Is Nothing Then Exit Sub   If Not IsNumeric(Target.Value) Then Exit Sub   Select Case True     Case Application.Count(Range("A1:A3")) = 3     c = 3     Case Application.Count(Range("A1:A3")) = 2     c = IIf(Application.Count(Range("A1:A2")) = 2, 6, xlNone)     Case Application.Count(Range("A1:A3")) = 1     c = IIf(Application.Count(Range("A1")) = 1, 5, xlNone)   End Select   ActiveSheet.Tab.ColorIndex = c End Sub を貼ります。(似てますが微妙に違います。)

hoshi7777
質問者

お礼

ありがとうございました。ベストアンサーに選べず申し訳ありません。 次回もよろしくお願いいたします。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

A1に数字 A1、A2に数字 A1、A2、A3に数字 の場合はわかりましたが たとえば、A1、A3に数字 あるいは、A2だけ数字 という場合がかかれていません。 そういう場合はシートタブに色をつけないのなら手順は下記のとおりです。 1. そのようにしたいシートのタブを右クリックして、[コードの表示]。 2. 出てきた白い所に、以下のコードを貼付けます。 '********これより下********** Private Sub Worksheet_Change(ByVal Target As Range) Dim c If Intersect(Target, Range("A1:A3")) Is Nothing Then Exit Sub If Not IsNumeric(Target.Value) Then Exit Sub Select Case True Case Application.Count(Range("A1:A3")) = 3 c = 3 Case Application.Count(Range("A1:A3")) = 2 c = IIf(Application.Count(Range("A1:A2")) = 2, 6, xlNone) Case Application.Count(Range("A1:A3")) = 1 c = IIf(Application.Count(Range("A1")) = 1, 5, xlNone) End Select Me.Tab.ColorIndex = c End Sub '********これより上********** 3.Alt+F11キーでワークシートへもどります。 これでOK A1からA3に数字を打ち込んで見てください。

hoshi7777
質問者

お礼

ありがとうございました。ThisWorkbookで一部修正で出来るようになりました。 本当にありがとうございました。

hoshi7777
質問者

補足

ありがとうございます。この動作を全てのシートで動作させるにはどうすればいいでしょうか。

関連するQ&A