Excel VBAで、もう少しどうにかならなかったのかな、と思う識別子があります。
その筆頭はRowsプロパティとRowプロパティです。
RowsプロパティはRangeオブジェクトを返し、Rowプロパティは長整数型の数値を返すという大きな違いがあるにも関わらず、よく似た名前ですからExcel VBAに慣れていない方が混乱するのも当然だと感じます。
同じく、もう少しどうにかならなかったのかと感じるプロパティに、
MergeArea
MergeCells
があります。
このサイト『インストラクターのネタ帳』へ、
「mergecells と mergearea の違い」
といった検索キーワードでのアクセスもあります。
この検索をなさった方の気持ちも、よくわかります。
MergeCellsとMergeAreaの違い
結論からお伝えすると、
Range.MergeCellsプロパティは、セル結合されているかどうかを、論理値で返します。
これに対して、
Range.MergeAreaプロパティは、結合されているセル範囲を表す、Rangeオブジェクトを返します。
MergeCellsとMergeAreaの違いをイミディエイトウィンドウで確認する
Range.MergeCellsとRange.MergeAreaの違いを、イミディエイトウィンドウで確認してみましょう。
例えば、A1:C1セルを結合してアクティブな状態で、イミディエイトウィンドウに
? ActiveCell.MergeCells
と入力して[Enter]キーを押せば、
True
が出力され、
? ActiveCell.MergeArea.Address
と入力して[Enter]キーを押せば、
$A$1:$C$1
が出力されます。
イミディエイトウィンドウに出力できるのは文字にできるデータだけ
Range.MergeAreaプロパティはRangeオブジェクトを返す一方、イミディエイトウィンドウに出力できるのは、文字列に変換できるデータだけですから、
? ActiveCell.MergeArea
と入力して[Enter]キーを押したときには
「実行時エラー'13': 型が一致しません。」
とエラーが表示されてしまいます。
そのため結合されているセル範囲を確認しやすい、セルアドレス(文字列)を返すRange.Addressプロパティを使って、
? ActiveCell.MergeArea.Address
としています。
2種類のプロパティ
拙著『いちばんやさしいExcel VBAの教本』の、Lesson 52「プロパティは2種類あることを知っておきましょう」に、
プロパティは、大きく2種類に分類できます。オブジェクトが持つ単なるデータを取得するためのプロパティと、オブジェクトを取得するためのプロパティです。
と書きました。
MergeCellsがTrue/Falseという単なるデータを取得するためのプロパティで、MergeAreaがオブジェクトを取得するためのプロパティです。
前述したRowが単なるデータを取得するためのプロパティで、Rowsがオブジェクトを取得するためのプロパティであるのと、似た関係でもあります。
Range.MergeCellsプロパティがTrue/Falseを返すこと、Range.MergeAreaプロパティがRangeオブジェクトを返すことを、強くイメージしておきましょう。
最終更新日時:2019-06-19 11:48
Home » Excel VBA Rangeオブジェクト » 結合セル » MergeCellsとMergeAreaの違い