色を指定したら、その色が使われていないセルも返せる関数
昨日は、こんなものを作ってみた。
infoment.hatenablog.com
作ってみて、思った。このままでは
「とにかく色が付いているセル」
のような選び方ができないぞ。さて、どうしたものか。
ということで、PCの前で悩むこと5分。思いついたのがこれ。
色を指定したら、その色が使われていないセルも返せればよい?
そこで昨日のものを、以下のように変更してみた。
Public Function GetColorRange(color_constant As Double, _ Optional exclusion_flag As Boolean = False) As Range ' 行番号のループ変数。 Dim r As Long ' 列番号のループ変数。 Dim c As Long ' 特定色のセル。 Dim myRng As Range With TargetRange For r = 1 To .Rows.Count For c = 1 To .Columns.Count If (ColorInfoArray(r, c) <> color_constant) = exclusion_flag Then If myRng Is Nothing Then Set myRng = .Cells(r, c) Else Set myRng = Union(myRng, .Cells(r, c)) End If End If Next Next End With Set GetColorRange = myRng End Function
変えたのは2か所のみ。
一つ目は、除外フラグ(exclusion_flag)の追加。
普段は指定した色の範囲を取得したいので、初期値はFalseとした。
Public Function GetColorRange(color_constant As Double, _ Optional exclusion_flag As Boolean = False) As Range
二つ目は、指定した色とセルの色が一致するかを判別する箇所。
If (ColorInfoArray(r, c) <> color_constant) = exclusion_flag Then
少々ややこしいが、
- 「指定色と一致しない」が正しいならば、指定色以外を返す。
- 「指定色と一致しない」が正しくないならば、指定色を返す。
ということで、強引に条件分岐の数を減らしてみた。
↓ それでは、こちらで試してみよう。
Sub Sample() With New ColorInfo .GetColorRange(256 ^ 3 - 1, True).Select End With End Sub
結果、意図した動作を実現できた。
しかしこれは、分かり難いことこの上ない。
もう少し、何とかならないものか。
ということで、明日に続く(かも。或いは、断念するかも)。
参考まで。