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

VBAでアクティブセルに色が着くようしています。
色のついていないセルを選択している時はよいのですが、条件付き書式で色を着けたセルを選択すると色はそのままになってしまいます。(条件付き書式で設定した色のまま変わらない)
色が着いたセルでも選択している時は違う色にして別のセルを選択した時は元の色に戻したいのですが、良い方法があれば教えてください。
よろしくお願いします。

A 回答 (4件)

条件付き書式のほうが優先ですからねえ。


条件付き書式でセルを修飾した後に色を付けるという、タイミングを見計らっての操作が必要になりますが、これ、結構面倒。
しかも重い。

・・・

どのようにアクティブセルに色を付けているのか分かりませんが、
自分なら条件付き書式のほうに色を付ける条件を追加します。

 =AND(CELL("ROW")=ROW(), CELL("COL")=COLUMN())

こんな条件式を色を付けたい範囲のセルに追加。(もちろん条件の一番上に置きます)

中身は、
 ・CELL関数で選択されているセルの行と列の番号を取得し、
 ・それぞれのセルの位置をROW関数、COLUMN関数で取得し、
 ・その値を比較する。
 ・同じならセルが選択されていると判断。
今感じです。

試しに設定を追加してみてください。
そしてセルを選択したら、F9キーを押してみてください。
要望とはちょっと違う動作になりますが、ほぼ希望する動作になっていると思います。

セルを選択したら即、色が変わってほしいのですよね。
F9キーは手動で再計算を手動で行う操作です。
そこはマクロ(VBA)で「Application.ScreenUpdating プロパティ」を使います。
 Application.ScreenUpdating = TRUE
これでOK。
再計算をしてくれます。
本来は「自動で計算しないよう」FALSE を指定して使った後に
 ”元に戻すために指定する” 
のですが、強制的に再計算させるので TRUE を指定して使います。
あとは「Workbook_SheetSelectionChange イベント」で選択するセルが変わったらマクロを起動させればいい。

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
  Application.ScreenUpdating = True
 End Sub

こんなマクロを追加になります。
(ちょっと重いのは勘弁してください)

・・・

考え方はすごく簡単ですが、ここまで到達できる人はなかなかいません。
ですのでヒントだけにしたかったのですが、この程度なら解説を含めても1000文字にもならないと判断し
そのまんま記載させていただきました。

……って、No.2 の回答者さんがそのまんま回答してますね。
    • good
    • 3
この回答へのお礼

解説で式の意味がわかり、大変助かります。
教えていただいた条件付き書式をつくり、他の方も言われているように優先順位を上げることで色をつけることができました。
ありがとうございます。

お礼日時:2022/06/12 07:25

No2です。



セルを利用しなくてすむので、No3様の方法の方が良いと思いますよ。
計算量は若干違うかも知れませんが、内部計算なのでさほどの差にはならないと思います。
(負荷がかかることは、No2もNo3も変わりがありません)
    • good
    • 0
この回答へのお礼

すぐに返答していただいたのに反映させることが出来ずにすみません。
以前教えていただいたものは、他のセルへの文字の追加や色付けなど応用して使用させてもらっており、本当に助かっています!
今回は処理にさほど差がないとのことなので、今使用出来ているNo.3の方のやり方でいこうと思います。
ありがとうございます!

お礼日時:2022/06/12 17:37

こんばんは



>VBAでアクティブセルに色が着くようしています。
具体的にどのような方法で行っているのか不明ですが、単にセルの背景色などを設定する方法だと、条件付き書式の方が優先されますので、ご質問のようになっているのではないかと推測します。
該当セルの条件付き書式を一旦外して、復帰するという処理を行えば、現状の方法でも色が着くはずですが、条件付き書式を操作するのはかなり面倒だと思います。

代替案として、条件付き書式の優先順位を利用する方法を考えてみました。

1)activecellの位置を返すユーザ関数を用意しておいて、
「これとセル位置が一致したら色を付ける」という条件付き書式を、優先順位を高くして設定します。
2)セル位置の変更では上記関数は動作しないので、
 SelectionChangeイベントで、シートを再計算させます。
以上で動作するようにはなりますが、条件設定範囲が広いと(全部計算するため)反応がかなり鈍くなるので、実用的とは思えませんでした。


反応速度を上げるために、次案として、作業用のセルを利用する方法を試してみました。
固定セルに、SelectionChangeイベントで、activecellのアドレスを返すようにします。
3)条件付き書式では、
 CELL("address",セル位置)と上記のアドレスが一致したら色が着くようにしておきます。
 (優先順位を高くしておくことは同じです)

こちらの方法であれば、ほぼ支障がない程度の速度で反応してくれます。
(負荷がかかっていることには変わりがありませんけれど・・)
    • good
    • 3
この回答へのお礼

この間は大変ありがとうございました。
思った通りの動作をしており、助かっています。
教えていただきたいのですが、SelectionChangeイベントで、activecellのアドレスを返すところで
Cells(3, 3).Value = Cells(ActiveCell.Row, ActiveCell.Column)
を追加したのですが、地番というよりそのセルに入力してある文字が表示されてしまいます。
条件付き書式では数式を使用して書式設定するセルを決定ののころで
=CELL("addresss",$C$3)
と入力していますが、どのセルを選択しても色が変わらなくなってしまいました。
どこが間違っているのでしょうか。
よろしくお願いします。

お礼日時:2022/06/12 00:26

アクティブセルじゃなくなったら、という条件で


色を設定すればよいです。

もしくは、アクティブセル以外のセル全部を
色付けする、という方法でもできます。
つまり、アクティブセルを選んだときに、
毎回シート全部を白紙化(いわゆるリセット)して、
そのあとアクティブセルには色付け、という
2段階設定にすれば、良いと思いますが。
    • good
    • 0
この回答へのお礼

ありがとうございます。

条件付き書式では文字がある場合に色付けするようにしています。
白紙化(いわゆるリセット)とは塗りつぶしなしのことでしょうか。
マクロの方で
Range("範囲").Interior.Color = xlNone
としているのですが、それでも条件付き書式の色が残ったままになってしまいます。
2段階設定とは条件付き書式の方でやるのでしょうか。
すみませんが教えてください。

お礼日時:2022/06/11 23:26

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A