Home » Excel VBA Rangeオブジェクト » 結合セル » VBAで結合セルをClearContentsしてもエラーにならないように-Range.MergeArea

VBAで結合セルをClearContentsしてもエラーにならないように-Range.MergeArea

動作検証バージョン:Windows 11 Home + 64bit Excel バージョン 2403(ビルド17404.20000クイック実行)ベータチャネル

「エクセル VBA 範囲 結合セルのclearcontents」
といった検索で、このサイト『インストラクターのネタ帳』へのアクセスが時折あります。

セルやセル範囲を表す、RangeオブジェクトのClearContentsメソッドを使うと、

セルの数式と値をクリアできます。

[スポンサードリンク]

結合セルでClearContentsは実行時エラーになる

ところが、A1セルが結合セルの一部だったときに

Range("A1").ClearContents

を実行したときには、以下のような実行時エラーが発生してしまいます。

実行時エラー'1004':
この操作は結合したセルには行えません。

「エクセル VBA 範囲 結合セルのclearcontents」
と検索なさった方は、これを回避する方法を探していらしたのだろうと私は推測しています。

Range.MergeAreaを使えば結合セルでClearContentsできる

結論からお伝えしましょう。
RangeオブジェクトのMergeAreaプロパティを利用すれば、

結合セルでRange.ClearContentsメソッドを呼び出しても、実行時エラーは発生しなくなります。

セル範囲を選択しておいてから以下のExcelマクロを実行すると、選択範囲内に結合セルがあったとしても、値と数式をクリアできます。

Sub 結合セルを含むセル範囲をClearContents()
 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

Range.MergeCellsプロパティを使って、

操作しようとしているセルが結合セルかどうかを判定し、結合セルであれば、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

「結合セル」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.