[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『チェンジイベントでセルの表示形式だけを』(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
コードの訂正、ありがとうございました。
For Each r In Range("C5,C7") 大変勉強になりました。ありがとうございます。引き続き、よろしくお願いします。
(kohiti) 2013/11/26(火) 03:15
条件付き書式はセルの内容に応じて書式を設定するもので、書式自体を判定条件 にすることはできません。
「セルが数値ではなかったら文字列の書式にする」など仕様は変更できないのでしょうか。 発想の転換をすれば問題は簡単になりそうですが、 書式は自由に変えられて、文字列以外の書式に色を付けたい(書式は文字列以外でも良い) というのであれば、現行のマクロのようになるかと思います。 (Mook) 2013/11/26(火) 08:31
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.