Excel VBA 質問スレッド №2045 (未解決)

背景色が黄色のセルの背景色をブルーにしたい

投稿者 : でんち     投稿日時 : 2024/11/19(Tue) 17:17:06     OS : Windows 10     EXCEL : Excel 2019
下記は例です。下記のようにするにはどのようにコードを書いたらいいでしょうか。

【実現したいこと】
A1~F3セルのうち、いくつかのセルは背景色が黄色。
背景色が黄色のセルを選択し、そのセルの背景色をブルーに変える。
なお背景色が黄色のセルはランダムなので、Range(A1)のように指定はできません。
背景色が付いているセルのみピックアップする、というコードが書きたいです。


下記のように記述したところ、とあるシートでは成功したのですが私が実行したいシートでは「colorlessRange.Select」のところで「rangeクラスのselectメソッドが失敗しました」というエラーが出てしまいます。
マクロを実行したときに別ブックにシートを移動してしまったことが原因でしょうか…。
全体のコードを記載した方が良ければ記載します。


Sub SelectColorLessCells()

   Dim colorlessRange As Range
   Dim rng As Range
   '色の付いていないセルだけを判別する
   For Each rng In Worksheets(1).UsedRange
      If rng.Interior.ColorIndex <> XlColorIndex.xlColorIndexNone Then
         If colorlessRange Is Nothing Then
            Set colorlessRange = rng
         Else
            Set colorlessRange = Union(colorlessRange, rng)
         End If
   End If
   Next rng
   colorlessRange.Select
   
'選択したセルの色を薄いブルーにする
    Selection.Interior.Color = RGB(221, 235, 247)
   
End Sub

スポンサーリンク
[返信 1] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : ごんぼほり     投稿日時 : 2024/11/19(Tue) 17:35:34
シートの指定ができてないのでしょうね
 
書式だけ置換できます
Sub sample()
    Application.FindFormat.Interior.Color = vbYellow
    Application.ReplaceFormat.Interior.Color = vbBlue
    Cells.Replace What:="", Replacement:="", SearchFormat:=True, ReplaceFormat:=True
End Sub

[返信 2] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : tkit     投稿日時 : 2024/11/20(Wed) 09:45:25
■[質問] でんちさん(2024-11-19 17:17:06)の記事
> 下記は例です。下記のようにするにはどのようにコードを書いたらいいでしょうか。
> 【実現したいこと】
> なお背景色が黄色のセルはランダムなので、Range(A1)のように指定はできません。
> 背景色が付いているセルのみピックアップする、というコードが書きたいです。

よく背景色を判定したがる方々が多いですが、
通常の塗りつぶしか条件付き書式の塗りつぶしかで、コードが変わります。

そもそも、ランダムと謳ってますが、何かしら一定に連続していない、だけでしょう?
通常の塗りつぶしであっても、何かしらの条件があるだろうし、
条件付き書式なら、既に条件がある訳です。

値を条件で判定するほうが、ベターです。

また、いちいちSelectする必要はありません。
「VBA Select 不要」で検索すれば、いくらでも出てきますので、
一読ください。

Unionで一括塗りつぶしする考え方は、実行時間の観点から、非常に良いと思います。
だたし、限界や重くなる場合もあります。

[返信 3] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : でんち     投稿日時 : 2024/11/20(Wed) 14:52:01
■[返信 1] ごんぼほりさん(2024-11-19 17:35:34)の記事
> シートの指定ができてないのでしょうね
>  
> 書式だけ置換できます
> Sub sample()
> Application.FindFormat.Interior.Color = vbYellow
> Application.ReplaceFormat.Interior.Color = vbBlue
> Cells.Replace What:="", Replacement:="", SearchFormat:=True, ReplaceFormat:=True
> End Sub


ご返信いただきありがとうございます!
記載していただいたコードを実行したところ、エラーにはならなかったのですがカラーが変わりませんでした。
背景色が黄色のセルは、セルを選択⇒塗りつぶししているわけではなく、条件付き書式で背景色指定をしているのでそれが原因かと思います。
実際、セルを選択⇒塗りつぶししたセルは上記コードで実行後に色が変わりました。
条件付き書式で背景色が変わったセルを、さらにマクロ実行時に別の背景色に変えるコードはあるのでしょうか?

[返信 4] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : でんち     投稿日時 : 2024/11/20(Wed) 15:34:44
■[返信 2] tkitさん(2024-11-20 09:45:25)の記事
> よく背景色を判定したがる方々が多いですが、
> 通常の塗りつぶしか条件付き書式の塗りつぶしかで、コードが変わります。

> そもそも、ランダムと謳ってますが、何かしら一定に連続していない、だけでしょう?
> 通常の塗りつぶしであっても、何かしらの条件があるだろうし、
> 条件付き書式なら、既に条件がある訳です。

> 値を条件で判定するほうが、ベターです。


ご返信いただきありがとうございます。
仰る通り、値を条件で判定する方がいいと思っております。
しかし①検索条件が複数ある、②検索結果が複数あるため、値を条件で判定するのは不可能と認識いたしました。
詳細はこの掲示板の№2043に記載ございますのでお手数ですがそちらをご確認ください。
何かいいやり方があればご教示いただけますと幸いです。

[返信 5] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : ごんぼほり     投稿日時 : 2024/11/20(Wed) 17:23:11
条件付き書式は、セル書式を上書きします。
条件付き書式で設定された書式は Range.DisplayFormat で取得できますが
DisplayFormatは読み取り専用ですので変更できません。当たり前ですね。
https://learn.microsoft.com/ja-jp/office/vba/api/excel.displayformat

条件付き書式を解除してからセルの背景色を変更するか
条件付き書式の設定そのものを変更する必要があります。

というか、そもそものやり方がおかしいと思います。
本当にしたいことは何かを説明して、どうするのが効率的なのかアドバイスをもらった方がよいと思います。

[返信 6] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : 通りすがり     投稿日時 : 2024/11/23(Sat) 08:37:49
条件付き書式で黄色に設定しているなら、条件付き書式の書式をブルーに変更するだけでは?

[返信 7] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : 通りすがり     投稿日時 : 2024/11/24(Sun) 12:34:43
条件付き書式の「ルールの管理」でシート全体の条件付き書式の一覧が表示できます。
その中で黄色の書式を設定して条件付き書式は一目でわかります。
その書式をクリックして、ブルーの背景色に変更するだけです。
マクロは不要。簡単な話です。

本当にしたいことは、ブルーに変更ではなく、それらのセルに対して合計をとるとか、
別シートに転記するとか、そういった類の話なのではないですか?
ブルーに変更なら条件付き書式の修正だから質問するまでもないわけです。

黄色の箇所の判別さえできれば、の気持ちなのだろう。
それは、DisplayFormatプロパティの利用で話は尽きています。

[返信 8] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : でんち     投稿日時 : 2024/11/26(Tue) 17:14:44
ごんぼほりさま
通りすがりさま

コメントありがとうございます。
なぜこのようなやり方を探しているのか?たしかに詳しく説明していなかったので疑問に思われて当然です。
どういったことを実現したいのか、なぜこのようなやり方に拘っているか下記記載いたしますので、まだ気に留めてくださっていたらお目通しお願いします。

A1~E1セル(最大5日指定可能)に祝日を入れると、A2~S2セルに先方の発注日が、A3~S3セルにこちらの受信日が自動的に反映されるフォーマットを関数を使用して作成しました。
(例)A1セルに11/4と入れると、A2~S2セルに11/4、11/5、11/6…と、A3セルに11/4、11/6、11/6…(受信日は月水金)とそれぞれ反映されます。
また1行目の祝日と3行目の受信日が一致するセルは、受信日行の背景色が黄色くなるよう条件付き書式で設定しています。
祝日に受信はできないため、A3~S3セルが黄色くなっているものは受信日を前後の日付に更新したいのですが、すると「A1~E1セルと一致する値の背景色を黄色にする」という条件から外れてしまい、背景色が消えてしまいます。
変更箇所が分かるよう、背景色をそのままにしたいのでVBAでのやり方を探していました。

ちなみにVBA実行のタイミングですが、元のデータは更新したくないので、祝日を入れる⇒VBA実行(その際名前を付けて保存)⇒新しいブックにて受信日行を修正と考えておりました。
変更したセルの色を変えるというコードも考えましたが、誤って色を変えたくないセルの更新をしてしまった場合は戻すのが面倒かなと思って諦めました。

ご確認よろしくお願いいたします。

[返信 9] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : 通りすがり     投稿日時 : 2024/11/27(Wed) 14:07:48
修正して黄色が消えることも重要な情報じゃないですか?警告がなくなったわけですから。

そもそも、先方発注日と当方受信日の対応関係のシートを作成しておくのが一般的じゃないですか?
祝日は予め分かっているものだし、MATCH関数(照合種類0,1の使い分け)とINDEX関数で対応関係は作れるはずです。

あとは、それを表引きするだけです、警告もなにも必要ないですよ。

[返信 10] Re : 背景色が黄色のセルの背景色をブルーにしたい
投稿者 : tkit     投稿日時 : 2024/11/29(Fri) 16:26:54
まとめると
> 1. A2~S2セルに11/4、11/5、11/6 に対し、A3セルに11/4、11/6、11/6…(受信日は月水金)
> 2. 祝日(A1~E1セルに入力された値)に受信はできないため、A3~S3セルが黄色くなっているものは受信日を前後の日付に更新
> 3. すると「A1~E1セルと一致する値の背景色を黄色にする」という条件から外れてしまい、背景色が消える
> 4. 変更箇所が分かるよう、背景色をそのままにしたい

⇒A3~S3セルに、条件付き書式を追加
A2~S2セルを基に、A3~S3セルに転記したであろう、決められた月水金の日付を取得し、A3~S3セルの値の値と比較、不一致であればオレンジにでもしたらどうですか。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2024-12-07 23:33:25 )
タイトルとURLをコピーしました