Home » ExcelVBA Rangeオブジェクト » セル結合 » MergeCellsとMergeAreaの違い

対象:Excel2010, Excel2013, Windows版Excel2016

Excel VBAのコードを書いていると、プロパティ等の名前でもう少しどうにかならなかったのかな、と思うことがあります。

その筆頭はRowsプロパティとRowプロパティです。

RowsプロパティはRangeオブジェクトを返し、Rowプロパティは長整数型の数値を返すという大きな違いがあるにも関わらず、よく似た名前ですからExcel VBAに慣れていない方が混乱するのも当然だと思っています。

同じく、もう少しどうにかならなかったのかと感じるプロパティに、
  MergeArea
  MergeCells
があります。

このサイト『インストラクターのネタ帳』へ、
「mergecells と mergearea の違い」
といった検索キーワードでのアクセスもあります。この検索をなさった方の気持ちも、よくわかります。

MergeCellsとMergeAreaの違い

結論からお伝えすると、
Range.MergeCellsプロパティは、セル結合されているかどうかを、TrueかFalseで返します。
これに対して、
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種類のプロパティ

プロパティは2種類あることを知っておきましょう

拙著『いちばんやさしいExcel VBAの教本』の、Lesson 52「プロパティは2種類あることを知っておきましょう」に、


プロパティは、大きく2種類に分類できます。オブジェクトが持つ単なるデータを取得するためのプロパティと、オブジェクトを取得するためのプロパティです。

と書きました。

MergeCellsがTrue/Falseという単なるデータを取得するためのプロパティで、MergeAreaがオブジェクトを取得するためのプロパティです。

前述したRowが単なるデータを取得するためのプロパティで、Rowsがオブジェクトを取得するためのプロパティであるのと、似た関係でもあります。

Range.MergeCellsプロパティがTrue/Falseを返すこと、Range.MergeAreaプロパティがRangeオブジェクトを返すことを、強くイメージしておきましょう。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セル結合 » MergeCellsとMergeAreaの違い

TrackBack:0

TrackBack URL
[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セル結合 » MergeCellsとMergeAreaの違い

「セル結合」の記事一覧

検索


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

.