アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2002、OS=WinXPです。エクセルので、特定セルに入力された文字列によってシート見出しの色を変えたいですが、VBA式がうまくいきません。

もし、セルB3の値がAAAの場合、シート見出しの色を緑(カラーNo=50)にする。
もし、セルB3の値がBBBの場合、シート見出しの色をピンク(カラーNo=7)にする。
もし、セルB3の値が上記以外の場合、シート見出しの色を白(カラーNo=2)にする。

というふうにしたいと考えています。マクロを用いていろ番号を調べたところ、上記Noでした。

Sub 会社名に合わせてシート見出し色を変更()
'
' ActiveSheet.Select
If ActiveSheet.Range("B3").Value = AAA Then
ActiveWorkbook.ActiveSheet.Tab.ColorIndex = 50
ElseIf ActiveSheet.Range("B3").Value = BBB Then
ActiveWorkbook.ActiveSheet.Tab.ColorIndex = 7
Else: ActiveWorkbook.ActiveSheet.Tab.ColorIndex = 2
End If

End Sub

上記式で実行をクリックしても実行されません。無反応です。調べて直してもだめでした。上記の式の間違いを教えていただけませんでしょうか???
さらに、このマクロを今開いているブック全体に反映するためには、ActiveSheet の文字を削除すればよいでしょうか??すみませんが、詳しい方、あわせてご回答いただけますでしょうか?


   

A 回答 (4件)

セルB3の値がAAAの場合


の値とは文字列のことと思うが、VBAでは文字列は”AAA"にするのは常識。
数値と文字列を峻別して考えないと。
ーーー
シートをアクチブにしたときというイベントに関連させてみると
ThisWorkbookのイベントで
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
' 会社名に合わせてシート見出し色を変更()
Select Case Sh.Range("B3").Value
Case "AAA"
Sh.Tab.ColorIndex = 50
Case "BBB"
Sh.Tab.ColorIndex = 7
Case Else
Sh.Tab.ColorIndex = 2 '白
End Select
End Sub
ーーー
Case文の方がすっきりすると思うが。
またAAA,AAA(2)などがあれば、両者同じ色にしたいということではないのかな。
であれば文字列AAAを含むという判定が必要になる。それは質問のコードお呼び上記のコードではダメ。
Instr関数などを使う方法でできる。
    • good
    • 0
この回答へのお礼

今回は、AAA(2)は必要なかったのですが、きっと必要になるときが出てきますので、そのときは参考になせていただきます。ありがとうございました。。。
無事、相手先の会社名に応じてシート見出し色を変えることに成功しました。ありがとうございました。

お礼日時:2010/07/10 23:34

Sub Macro3()


For i = 1 To Sheets.Count
Select Case Sheets(i).Range("B3").Value
Case "AAA"
Sheets(i).Tab.ColorIndex = 50
Case "BBB"
Sheets(i).Tab.ColorIndex = 7
Case Else
Sheets(i).Tab.ColorIndex = 2 '白
End Select
Next i
End Sub
でどうでしょう。
    • good
    • 0
この回答へのお礼

Case文のほうがスッキリしていますね。回答ありがとうございました。無事、望んだ操作ができました。ありがとうございました。

お礼日時:2010/07/10 23:35

何もおきないってことは、どのロジックも通過していないことなので、


条件式が間違っていると想定されます。

こういうときは、
コマンド記載を調べても進まないときあるので、
内容をメッセージボックス表示させるなどでどこをどう通過しているかを把握する、
わなをしかけてみる、
ブレイクポイントを設定してみる、
ところから始めてください。
コーディングできるのだからコーディングして調べていく。
記載は問題ないのにおかしいときは、対象としているデータ値「=AAA」が
おかしいときです。

また、
「If ActiveSheet.Range("B3").Value = AAA Then」
「End If」
の順番で処理されます、とか
「If ActiveSheet.Range("B3").Value = AAA Then」
「Else: ActiveWorkbook.ActiveSheet.Tab.ColorIndex = 2」
「End If」
の順番で処理されます、とか
これだけのヒントでも全然違います。

「ActiveSheet.Range("B3").Value」は判定したいセルになっているか。
「If ActiveSheet.Range("B3").Value = AAA Then」の「AAA」記載。
「Else: 」の「:」記載はコメントの意?。
    • good
    • 0
この回答へのお礼

原因が"AAA”になっていなく、AAAだったことがわかりました。ありがとうございました。

お礼日時:2010/07/10 23:37

ActiveSheetはそのままでも、AAAやBBBは文字列ですので "AAA" などにすることが必要ですね。

    • good
    • 0
この回答へのお礼

"AAA"にすることで動きました。ありがとうございました。

お礼日時:2010/07/10 23:11

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