セルの色を変えたいのだけれども、既にセルに色が付いているところはそのままにしておきたい!!
セルの色が付いていないセルだけ、選択してセルの色を変えたい!!
よし、まずはセルの選択だ!!
な、ない!?
そんなぁ・・・地道に選択していくしかないんかぁ・・・
いえいえ、そんなことはありません。
そんなときに役立つVBAのコードをご紹介いたします。
検証した環境
Windows10
Excel2019
色の付いたセルを判別するVBAコード
まずは、色の付いたセルと色の付いていないセルを判別できなければ始まりません。
下記のコードは、使われているセル範囲の中で色の付いていないセルを判別してイミディエイトウィンドウにアドレスを表示するコードです。
Sub WriteColorLessAddress() Dim rng As Range '色の付いていないセルだけを判別してアドレスを表示する For Each rng In WorkSheets(1).UsedRange If rng.Interior.ColorIndex = XlColorIndex.xlColorIndexNone Then Debug.Print rng.Address End If Next rng End Sub
ポイントは、XlColorIndex.xlColorIndexNone定数です。
これは、ColorIndexプロパティで、色が付いていないよーという状態を表す定数です。
ちなみにその定数の中身は10進数で言うところの-4142という数字です。
イミディエイトウィンドウで下記のように書いてエンターを押すと中身が-4142であることを確認することができます。
?XlColorIndex.xlColorIndexNone
この定数とColorIndexプロパティを比較しています。色の付いていないセルなのでイコールのときですね。ここを不等号(<>)にすれば色の付いているセルだけを判別することができます。
下記のWorkSheets(1)の部分はご自身の環境に合わせて適宜変更してください。
For Each rng In WorkSheets(1).UsedRange
色の付いたセルだけを選択するVBAのコード
色の付いたセルを判別するコードを応用して、色の付いたセルだけを選択するコードに書き換えます。
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 End Sub
書き換えたところは次のところ。
If colorlessRange Is Nothing Then Set colorlessRange = rng Else Set colorlessRange = Union(colorlessRange, rng) End If
Unionはセル範囲を結合してくれる便利なメソッドです。
ただし。UnionにNothingなセル範囲を指定してしまうとエラーになってしまいます。
colorlessRange変数は最初はNothingなので、Nothingを判定して、Nothingの場合はrngをセットしてあげています。
要するに最初のときだけUnionせずにrngをセットしてますよということです。最初からそう書けよって感じですね。
ここまでできればあとは最後にSelectしてあげるだけです。
これを実行すれば、色が付いていないセル範囲だけを選択することができます!!
先ほども書いた通り、
rng.Interior.ColorIndex = XlColorIndex.xlColorIndexNone
ここが=なら色が付いていないセル、<>なら色が付いているセルが選択できるようになります。
終わりに
色の付いていないセルだけを選択するVBAのコードについて解説しました。
多分、将来Excelがバージョンアップすることでセルの選択機能がパワーアップしてこのコードも不要になる日が来るでしょう。
それまで、がんばれ、このコード!!
というわけで、ここまでお読みいただきありがとうございました。