「エクセル VBA 範囲 結合セルのclearcontents」
といった検索で、このサイト『インストラクターのネタ帳』へのアクセスが時折あります。
セルやセル範囲を表す、RangeオブジェクトのClearContentsメソッドを使うと、
セルの数式と値をクリアできます。
結合セルでClearContentsは実行時エラーになる
ところが、A1セルが結合セルの一部だったときに
Range("A1").ClearContents
を実行したときには、以下のような実行時エラーが発生してしまいます。
実行時エラー'1004':
この操作は結合したセルには行えません。
「エクセル VBA 範囲 結合セルのclearcontents」
と検索なさった方は、これを回避する方法を探していらしたのだろうと私は推測しています。
Range.MergeAreaを使えば結合セルでClearContentsできる
結論からお伝えしましょう。
RangeオブジェクトのMergeAreaプロパティを利用すれば、
結合セルでRange.ClearContentsメソッドを呼び出しても、実行時エラーは発生しなくなります。
セル範囲を選択しておいてから以下のExcelマクロを実行すると、選択範囲内に結合セルがあったとしても、値と数式をクリアできます。
Dim rng As Range
For Each rng In ActiveWindow.RangeSelection
rng.MergeArea.ClearContents
Next
End Sub
WindowオブジェクトのRangeSelectionプロパティで取得できる選択セルに対し、For Each~Nextループを回して、
Dim rng As Range For Each rng In ActiveWindow.RangeSelection
順番にMergeAreaプロパティを使って取得できる結合セルを表すRangeオブジェクトを取得して、ClearContentsメソッドを実行しています。
rng.MergeArea.ClearContents
MergeCellsプロパティを使う条件分岐は不要
上記のFor Each~Nextループ内を、以下のようにしているコードをネット上では見かける場合もあります。
For Each rng In ActiveWindow.RangeSelection If rng.MergeCells Then rng.MergeArea.ClearContents Else rng.ClearContents End If Next
操作しようとしているセルが結合セルかどうかを判定し、結合セルであれば、MergeAreaプロパティで取得できるRangeに対してClearContentsを実行し、
If rng.MergeCells Then rng.MergeArea.ClearContents
結合セルでなければ、そのままClearContentsを実行しています。
Else rng.ClearContents End If
気持はよくわかりますが、この条件分岐は不要なはずです。
結合セルではないセルに対して
rng.MergeArea.ClearContents
を実行したとしても、エラーは発生しないはずです。
最終更新日時:2024-03-01 04:48
Home » Excel VBA Rangeオブジェクト » 結合セル » VBAで結合セルをClearContentsしてもエラーにならないように-Range.MergeArea