
エクセルマクロで、
たとえば、「りんご」「ぶどう」「みかん」「いちご」「なし」という5つのシートがあって、
シート名が「りんご」「みかん」「いちご」のシートはシートの色を赤にして、その他のシートはシート色を青にする、といったことをしたいのですが、マクロではどのようにしたらよいのでしょうか。
実際にはシートが20シートあり、手処理で色を変更するという単純作業をやっているため、自動化したいと考えています。
マクロについては初心者のため、自分ではどのように書いたらよいかわかりませんので、どうかよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
とりあえずはこんな感じで。
標準モジュールとかシートモジュールに以下のコードを書いて実行してみてください
シートの色というのはシート見出しの色ということでいいんですかね?
Sub Test
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name = "りんご" Or ws.Name = "みかん" Or ws.Name = "いちご" Then
'シート見出しの色を赤にする
ws.Tab.ColorIndex = 3
Else
'シート見出しの色を青にする
ws.Tab.ColorIndex = 5
End If
Next
End Sub
No.3
- 回答日時:
一例です。
シート全体の色を変えましたが、もしシート見出しだったら
ws.Cells.Interior.ColorIndex = ci を
ws.tab.ColorIndex = ci に変えてください。
Sub test01()
Dim ws As Worksheet
For Each ws In Worksheets
Select Case ws.Name
Case "りんご", "みかん", "いちご": ci = 3
Case Else: ci = 5
End Select
ws.Cells.Interior.ColorIndex = ci
Next
End Sub
Select Case 構文ですのでいろいろ応用できると思います。
No.2
- 回答日時:
シート名を見つけるメソッドなどありません。
シートはどうして(どのような方法で)特定できるのか、初歩の段階で、勉強すべきなんだ。一番基礎的なことだ。
(1)名前
(2)インデックス番号
(3)ActiveSheet(本質問と関係なし)
(4)Previous,Next(本質問と関係なし)
(5)すべてのシートを名前を捉えて1つづ聞いて捉える
Sub test01()
Dim sh As Worksheet
For Each sh In Worksheets
If sh.Name = "Sheet1" Or sh.Name = "Sheet3" Then
MsgBox sh.Name
End If
Next
End Sub
をやってみてご覧。
または
Sub test03()
For i = 1 To Sheets.Count
If Sheets(i).Name = "Sheet1" Or Sheets(i).Name = "Sheet3" Then
MsgBox Sheets(i).Name
End If
Next i
End Sub
なてのもある。
ーー
(1)は
IFをつかわずとも、少数の場合は
Sub test02()
Worksheets("Sheet1").Tab.ColorIndex = 6
Worksheets("Sheet3").Tab.ColorIndex = 6
End Sub
のように列挙して(並べた)らしまい。
泥臭いが意外に、後からこのコードを見ると、一見して内容が良くわかる良さが有る。
ーー
選択するシート名が多い場合は
配列やセル範囲にシート名を持って
Sub test04()
Dim sh As Worksheet
s = Array("Sheet2", "Sheet4") '選択するシートを配列に
For Each sh In Worksheets
For Each shx In s
MsgBox sh.Name & "-" & shx
If sh.Name = shx Then
sh.Tab.ColorIndex = 5
End If
Next
Next
End Sub
のようにネストして繰り回す。
ーーー
シートタブの色は着けても、そのシートを選択していると、線状にしか見えないので、関係ないシートを選ぶとタブに色が現れるのは知ってるでしょうね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBA Ifでシート名が合致したら別ファイルから転記する場合のElse IfとForの書き方
Visual Basic(VBA)
-
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
-
VBAで指定シート以外の選択
Visual Basic(VBA)
-
-
4
VBA シート名が一致した場合の転記内容について
Visual Basic(VBA)
-
5
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
6
【VBA】シート名に特定文字が入っていたらマクロを実行したいです。
Visual Basic(VBA)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
9
特定のシート名のシートのみ除外して、それ以外のシート名のシートをすべて集約する方法(VBA)
Excel(エクセル)
-
10
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
11
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
12
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
13
VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください
Excel(エクセル)
-
14
B列の最終行までA列をオートフィル
Visual Basic(VBA)
-
15
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
16
エクセル: セルの枠を超えて表示
Excel(エクセル)
-
17
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
-
18
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
19
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
20
VBAでダブルコーテーション入りの数式をセルにセットしたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
EXCELの図形(テキストボックス)...
-
エクセルのファイルサイズが急...
-
ハイパーリンクでジャンプした...
-
特定のシートのみ再計算させな...
-
エクセルで複数のシートに画像...
-
エクセルの2つのシートを並び...
-
【ExcelVBA】マクロの入ったシ...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
エクセル、別のシートの表をポ...
-
エクセルのシー名を二段表示に...
-
エクセルを開くとメニューバー...
-
EXCELで存在しないシート...
-
EXCELの「シートの見出し」のフ...
-
Wordで差し込み印刷時に表示す...
-
アクセスからエクセルのシート...
-
エクセルの複数シートでのリン...
-
ワード差込ファイルで複数エク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
ハイパーリンクでジャンプした...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルで複数のシートに画像...
-
確定申告用の医療費集計フォー...
-
エクセルのシー名を二段表示に...
-
EXCELの図形(テキストボックス)...
-
エクセル、特定のシートにパス...
-
Wordで差し込み印刷時に表示す...
-
ワークシートそのものの色を変...
-
Accessのテーブルを既存のExcel...
-
EXCELで存在しないシート...
-
エクセルの複数シートでのリン...
-
エクセルのファイルサイズが急...
-
エクセルの2つのシートを並び...
-
エクセルのシート連番の振り直し
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
おすすめ情報