選択した条件付き書式の範囲を見える化する

一昨日はリストボックスに表示した条件付き書式のうち、選択したもの以外を削除してみた。
infoment.hatenablog.com
ただし、どの範囲の条件付き書式を選択したのか分り辛く、実用的ではなかった。そこで今回は、

選択した条件式が、どの範囲に適用されているかを見える化する

ことに挑戦する。
f:id:Infoment:20181223180717p:plain
色々と試してみたところ、各条件付き書式が適用される範囲は

AppliesTo.Address

で得られることが分かった。早速リストボックスには、
一列目:適用範囲
二列目:条件式
を表示させてみる。

Private Sub UserForm_Initialize()
    Dim seq() As Variant
    ReDim seq(1 To ActiveSheet.Cells.FormatConditions.Count, 1 To 2)
    Dim i As Long
    Dim FC As FormatCondition
    For i = 1 To UBound(seq)
        Set FC = ActiveSheet.Cells.FormatConditions(i)
            seq(i, 1) = FC.AppliesTo.Address
            seq(i, 2) = FC.Formula1
    Next
    
    ListBox1.List = seq
End Sub

f:id:Infoment:20181223181220p:plain

適用範囲のアドレスは見える化できた。でもまだ、直感的な理解には至らない。
そこで、リストボックスで選択した条件付き書式の範囲を、実際にシート上で選択させてみる。
まず、↓ 選択した条件付き書式の適用範囲を、Unionメソッドで一まとめにする。

Private Property Get myRng() As Range
    Dim i As Long
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            If myRng Is Nothing Then
                Set myRng = Range(ListBox1.List(i, 0))
            Else
                Set myRng = Union(myRng, Range(ListBox1.List(i, 0)))
            End If
        End If
    Next
End Property


ここまで出来れば、後はListBoxのMouseUpイベントで選択させるだけだ。

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Not myRng Is Nothing Then
        myRng.Select
    End If
End Sub


結果がこちら。
f:id:Infoment:20181223181941g:plain

リストで選択した項目の適用範囲が、連動して選択されるようになった。

これでまた一歩、野望に近づいた。

参考まで。