• ベストアンサー

【Excel VBA】シート見出しの色を変更する

Excel2003を使用しています。 シート数が10数枚のBookが複数あり、これらのBookで、シートのデータが変更されたら、シート見出しに色を付けるマクロを作りたく、とりあえず、マクロの記録をとってみました。 マクロの記録で、シート見出しの色を変更するコードや複数のシートを選択するコードはわかりましたが、実際にしたいことは、シート名が4桁の数値のシートにだけ、このマクロが実行されるようにしたいのです。このようなことは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? よろしくお願いします。

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

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

1ブックの中ではシートの値(書式は反応しない、数式は値が変わり反応する)を変えたらメッセージを出すものを実験する。 VBEのVBAProjectの当該ブックの「Thisworkbook」で右クリックして「コードの表示」をだし、 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) MsgBox "aaa" End Sub を入れる。 ーー これでどのシートでも値を変更すれば「aaa」と表示されることを確認する。 ーーー どのシートのセルの値を変えても、このルーチンに飛んでくるから Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) MsgBox "aaa" MsgBox ActiveSheet.Name End Sub をやってみて、シート名が取れるから、シート名文字列を4桁の数字かどうかチェックし、シートタブを色を変える。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) '--ここへシート名が数字4桁かチェックを入れる MsgBox "aaa" MsgBox ActiveSheet.Name ActiveSheet.Tab.ColorIndex = 3 End Sub

rx-z5815
質問者

お礼

回答ありがとうございます。 順を追って丁寧に説明していただいたおかげで、マクロ初心者の私でも理解することができました。 「ThisWorkbook」を右クリック → コードの表示 → SheetChangeイベントにNo.1の方のサンプルを参考にさせていただきながら、自分なりにコードを記述して試してみたのですが、エラーが出てしまい、行き詰っていたところでしたので、助かりました。 ありがとうございました。

その他の回答 (2)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。補足への回答が遅くなりました >この場合、該当のシートモジュール全てにイベントプロシージャを作成するのでしょうか 普通はそうですね。でもその場合はマクロを少し変更する必要があります。各シートのモジュールシートに貼り付けるマクロは以下になります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sh As Worksheet   Set sh = ActiveSheet   If IsNumeric(sh.Name) And Len(sh.Name) = 4 Then     sh.Tab.ColorIndex = 4   Else     sh.Tab.ColorIndex = xlNone   End If End Sub でもシートがたくさんあるときや、シートの追加を行う場合は不便です。そんなときは上の方法ではなくクラスモジュールを使用するのがよいでしょう。 まず次のマクロをThisWorkbookのモジュールシートに貼り付けます。 Dim myAppCls As New Class1 Sub Workbook_Open()   Set myAppCls.myApp = Application End Sub 次にVBE画面で「挿入」→「クラスモジュール」で開く画面に以下を貼り付けます Public WithEvents myApp As Application Private Sub myApp_sheetchange(ByVal sh As Object, ByVal trget As Range)   If IsNumeric(sh.Name) And Len(sh.Name) = 4 Then     sh.Tab.ColorIndex = 4   Else     sh.Tab.ColorIndex = xlNone   End If End Sub ブックを保存して一旦閉じて、再度開いてみてください。 セルの値が変わったシートのタブの色が変わるはずです (ただし「数字」「4桁」の条件に合っていればですが)

rx-z5815
質問者

お礼

再度の回答ありがとうございます。 >シートがたくさんあるときや、シートの追加を行う場合は不便です。そんなときは上の方法ではなくクラスモジュールを使用するのがよいでしょう。 1つのBookのシート数は10数枚ですが、同様のBookが複数あり、シートの追加を行うこともありまして、全てのシートモジュールに同じ内容のイベント書くのは手間もかかるので、とりあえず保留にしていたところ、クラスモジュールを使用する方法を教えていただき、助かりました。 また、クラスモジュールはほとんど使用したことがなかったので、勉強になりました。 ありがとうございました!

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

マクロサンプルです。 以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。 Sub Macro1() Dim ws As Worksheet  For Each ws In Worksheets   If IsNumeric(ws.Name) And Len(ws.Name) = 4 Then    ws.Tab.ColorIndex = 4   Else    ws.Tab.ColorIndex = xlNone   End If  Next ws End Sub

rx-z5815
質問者

お礼

早々の回答ありがとうございます。 教えていただいたサンプルを、実際に試してみたところ、うまくいきました。 質問文にも書いておりますが、シート(シート名が4桁の数値のシート)のデータが変更されたら、このマクロが実行されるようにしたいのですが、この場合、該当のシートモジュール全てにイベントプロシージャを作成するのでしょうか?それとも、他に何か方法があるのでしょうか? 再度の質問で恐れ入りますが、よろしくお願いします。

関連するQ&A

  • VBAで一番後尾のシート見出しの色を変更したい

    WIN XP エクセル2003 BOOK内の一番後尾のシート見出しの色を変更したいのですが 下記コードでは見出しの色が変わりません。 何処が間違っているのかわかりません。ご教授お願い致します。 Sub シート見出し色変更() Dim N As Integer Dim sh As Worksheet N = ActiveWorkbook.Worksheets.Count Worksheets(N).Activate Set sh = ActiveSheet sh.Tab.ColorIndex = 3 Worksheets(1).Select End Sub

  • Excel2007のシート見出しの色について

    Excel2007のシート見出しの色が薄くて、どのシートを選択しているのかわかりにくくて困っています。見出しの標準の色を2003のように設定が出来ますか?

  • シート見出しの色

    全シートを対象として A1セルに整数が入力されたらそのシートのシート見出しが赤になり。A1セルに文字が入力されたらそのシートのシート見出しが黄色になるマクロの記述を教えてください。よろしくお願いします。

  • Excel2000でのシート見出しの色について

    Excel2000では、シート見出しの色は設定にないのでしょうか Excel2002ではあるみたいなのですが。教えてください

  • シート見出し名の下2桁を ”必ず ” 連番 かつ 12の倍数にするには?

    基本は、シート見出し名の 下2桁だけが、 連番  かつ  12の倍数で、 昇順になっていますが、 ”たまに” 一部シートが抜けている ( ない ) 時がありますので、 マクロ実行後に、 きちんと 合計  12枚  or  24枚  or  36枚  にしたいのです。 抜けている ( ない ) 場合、 抜けているシート数は、多くても  4・5枚 です ( 抜けているシートの場所は変動します )。 3通り のマクロが必要のように思いますが、下記例の 1通り をどうかご教授下さいませ。 ----------------------------- '下記例は、   抜けているシート 4番目 と 最終の36番目 を挿入し、シート数を 合計36 にしたい場合の例です。 'この場合、マクロ実行前は シート数36 を超えることはありません。 '「 **01 ~ **12 」 は、必ず昇順になっています。 ブック1( 実行前シート数 合計34 ) シート見出し **01 **02 **03    **05 **06 ・・ **12 **01 ・・ **12 **01 ・・ **11 ↓↓↓↓ ブック1( 実行後シート数 合計36 ) シート見出し **01 **02 **03  挿入したシート1  **05  **06 ・・ **12 **01 ・・ **12 **01 ・・ **11  挿入したシート2

  • 条件により、シート見出しの色を変更したい

    エクセル2007を使用してします。 ある報告書の全シートを対象として A1セルにkさんの名前が入力されたらそのシートのシート見出しが緑になり、A2セルにmさんの名前が入力されたらそのシートのシート見出しが青になり、なおかつ、kさんとmさん2人の名前が入力されたらそのシート見出しの色が黄色に自動でなるマクロの記述を教えてください。よろしくお願いします。

  • Excel2007のVBAについて

    Excel2007のVBAについて Excel2007以前では「マクロの記録」を実行して罫線や図形の描写を行って、「記録終了」を行うと作業していたコードが記述され、それを加工したりして使っていましたが、Excel2007で同じように行ってもコードが記述されてませんでした。 セルの操作等はコードが記述されていました。 どこか、私の操作方法が間違っているのでしょうか。また2003のようにコードを記述させる方法が別途あるのでしょうか、よろしくお願いします。 関係ないとおもいますが、 「Excelのオプション」で「開発タブをリボンに表示する」はチェック入れてあります。 「マクロの設定」では「すべてのマクロを有効にする」にチェックしています。

  • エクセル VBA シート見出し色の参照について

    エクセルVBAでブック内のシート見出し色が赤のものだけ全てを 印刷し、なければ、”印刷対象はありません”とメッセージを1回だけ出すマクロを作成したいのですが、どのようなモジュールを作成すればいいかわかりません。 教えていただけますでしょうか。

  • Excel2007シートの見出しを非表示にしたい

    Excel2007を使用しています。 シートの見出しを非表示にしたいのですが、 どのようにしたら良いのでしょうか? シートの見出しとは、Excelの画面左下のシートを切り替える場所などを指しています。 もしご存じでしたら、教えて頂けませんか? マクロを調べましたら、 ActiveWindow.DisplayWorkbookTabs = False で出来るとありました。実際、これで実現できました。 マクロを使用せずに非表示にすることはできないのでしょうか? もしご存じでしたら、教えてください。 よろしくお願いいたします。

  • VBAでsheetのコピー

    初めまして、宜しくお願い致します。環境:WindowsXPSP3EXCEL2010やりたい事Book1に複数の名前の付いたsheetがあります。sheetの数は可変です。このBook1のsheetをVBAから新に作成するBook2のsheet1に纏めたいのですが、Book2のsheet1だけに纏めたいのですが、Book2のsheet1の名前は、固定で構いません。Book1の一番初めのsheetにコピーする時だけ3行目にある見出しだけは、Book2のsheet1に付けたく。それ以外のBook1のsheetは、デターだけをコピーしたいのですが、作成したマクロでは、実行時エラーがでます。【実行時エラー'9'】【インデックスが有効範囲にありません】とでます。次の部分です。「Sheets("mySheetName(i)").Copy Before:=Workbooks("Book1").Sheets("Sheet1")」また、Book2のsheet1の名前は固定で構いません。しかし、マクロの記述の仕方も判りません。どなたかご教授願います。何卒宜しくお願い申し上げます。

専門家に質問してみよう