オートフィルターとClearContentsメソッド
フィルターをかけているときのRange.ClearContentsメソッドの挙動
ちょっとビックリしたので、記しておく。
フィルターで非表示の列が含まれているRangeオブジェクトにClearContentsメソッドを実行する
こんな表があったとする。E列には全て値が入っている。
んで、オートフィルターで「武松」と「楊志」の行を非表示にする。
こうなる。
んで、この状態(E列の上から下までが選択されている)で
Public Sub testClearValue() Dim targetRange As Range Set targetRange = Selection targetRange.ClearContents End Sub
このコードを実行する。見ての通り選択範囲(Selection)を変数targetRangeにぶち込んで、targetRangeに対してClearContentsメソッドを実行するだけの簡単なプロシージャだ。
すると、
こうなる。一見、意図通りの結果に見えるが、フィルターを解除すると、
ファッ!!!!????
フィルターをかけた状態でイミディエイトで確認すると、
この通り。
よって、「Selection」すなわち「targetRange」は、ちゃんとセル14個分のはず。
なんでやねん!!!!????
範囲内のそれぞれのセルにClearContentsメソッドを実行する
わけが分からないけれど、現実なのだから仕方がない。
同じ状態から、今度は
Public Sub testClearValue() Dim targetCell As Range For Each targetCell In Selection targetCell.ClearContents Next End Sub
このコードでやってみる。
今度は意図通りの結果となった。
おわりに
こんなことになるとは全く知らなかった。
フィルターと併用するときには気をつけないといけないなあ。