『チェンジイベントでセルの表示形式だけを』(kohiti)Windows7 Excel2007 条件付き書式では、セルの書式設定の表示形式("標準"や"文字列"や"通貨"など)の操作はできないということで、マクロを勉強中です C5セル、C7セルの表示形式が文字列でなければ、セルの背景色を赤色にするコードを 下のように考えました。 シートモジュールのチェンジイベントかな?と思いましたが、行き詰りました。 どうしてもわからないので質問します。 下のコードでは、セルの移動と言っても、Targetのセルに戻らないと発生しません。 また、Sub Worksheet_SelectionChange を、Sub Worksheet_Change に変えてみたりしましたが、 Targetのセルを、クリックや文字変更しないと発生しませんでした。 セルをクリックしたり、セルの文字を変更したりしないで、 セルの表示形式だけを変えて移動した場合に速攻で発生するようなコードにするには どのようにしたらいいのでしょうか? (マクロではなくても、別の方法があればご指導をお願いします) よろしくお願いします! Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$C$5" Or Target.Address = "$C$7" Then If Target.NumberFormatLocal <> "@" Then Target.Interior.ColorIndex = 3 MsgBox (Target.Address & "を文字列にしてください") Exit Sub ElseIf Target.NumberFormatLocal = "@" Then Target.Interior.ColorIndex = xlNone End If End If End Sub ---- >条件付き書式では、セルの書式設定の表示形式("標準"や"文字列"や"通貨"など)の操作はできないと どこでそのような話になったかわかりませんが、2007 以降では条件付き書式で書式の 設定ができますけれど、書式の判定がしたいということでしょうか。 書式を文字列に固定したいだけなら、シートの保護でもできますし、条件付き書式で いつでも真になる設定(例えば空白でなかったら)で文字列に指定するとかでもでき そうです。 マクロに関して言えば、動作が対象セルを選択したときになるのは、選択対象のセルを限定しているからです。 >If Target.Address = "$C$5" Or Target.Address = "$C$7" Then これを外し、Target ではなく常に C5、C7に対して処理をしたらどうでしょうか。 Dim r As Range For Each r In Range("C5,C7") If r.NumberFormatLocal <> "@" Then r.Interior.ColorIndex = 3 MsgBox (r.Address & "を文字列にしてください") Else r.Interior.ColorIndex = xlNone End If Next 蛇足ですが、ElseIf の条件は 必ず If の反対条件なので Else で十分です。 (Mook) 2013/11/26(火) 01:44 ---- (Mook)さん ありがとうございます。条件付き書式でやってみました。 Targetは、いくつかのセルで、初めからTargetのセルを文字列にしておきます。 Targetのセルの値に関係なく(文字の変更に関係なく)、条件付き書式で表示形式の設定をする場合、 ”セルが文字列ではなかったら(他の表示形式に変わった場合)、セルの背景色を赤色にする” としたいのですが、 新しいルール>新しい書式ルール>ルールの種類の選択 の所で迷ってしまいました。 6種類あります。どれを選び、どのように進めばいいでしょう? コードの訂正、ありがとうございました。 For Each r In Range("C5,C7") 大変勉強になりました。ありがとうございます。引き続き、よろしくお願いします。 (kohiti) 2013/11/26(火) 03:15 ---- 条件付き書式はセルの内容に応じて書式を設定するもので、書式自体を判定条件 にすることはできません。 「セルが数値ではなかったら文字列の書式にする」など仕様は変更できないのでしょうか。 発想の転換をすれば問題は簡単になりそうですが、 書式は自由に変えられて、文字列以外の書式に色を付けたい(書式は文字列以外でも良い) というのであれば、現行のマクロのようになるかと思います。 (Mook) 2013/11/26(火) 08:31