選択した条件付き書式の範囲を見える化する
一昨日はリストボックスに表示した条件付き書式のうち、選択したもの以外を削除してみた。
infoment.hatenablog.com
ただし、どの範囲の条件付き書式を選択したのか分り辛く、実用的ではなかった。そこで今回は、
選択した条件式が、どの範囲に適用されているかを見える化する
ことに挑戦する。
色々と試してみたところ、各条件付き書式が適用される範囲は
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
適用範囲のアドレスは見える化できた。でもまだ、直感的な理解には至らない。
そこで、リストボックスで選択した条件付き書式の範囲を、実際にシート上で選択させてみる。
まず、↓ 選択した条件付き書式の適用範囲を、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
結果がこちら。
リストで選択した項目の適用範囲が、連動して選択されるようになった。
これでまた一歩、野望に近づいた。
参考まで。