結合されたセルの値

結合セルというのはなかなか厄介な仕様となっている。

例えば、A1とA2が結合されており、なんらかの値が入っているとした場合
Range(“A1”).Valueでその値を得られるが、Range(“A2”).Valueは空っぽ。
これでは全てのセルをサーチして処理するような場合、面倒なことになる。

上記の場合、まずA2が結合されたセルかを判定する必要がある。
それがMergeCellsプロパティで、結合されたセルの一部ならTrue、違えばFalseとなる。

一部とわかれば欲しいのは結合セルの値(Value)。
一行で書くなら

a = Range(“A2”).MergeArea.Cells(1).Value

となるが、順に説明をしていく。

まずMergeAreaプロパティで、指定したセルを含む結合セルの範囲を示すRange型の値を得る。

Dim r As Range
Set r = Range(“A2”).MergeArea

上記のようにすればrはRange(“$A$1:$A$2”)と同等になる。
(r.Addressを表示させれば確認ができる。)

セルの値はRangeの範囲の最初に入っているので、Cellsプロパティを使って一番最初を指定してやれば良い。.Cells(1)で指定できるので、上の続きで以下のように書けば値を得られる。
(縦横に結合していてもCells(1,1)と書く必要はない。Cells(1)で一番最初となる)

a = r.Cells(1).Value

ちなみにこのようにMergeAreaプロパティで得たRange型の範囲から、結合した部分の列数(.Columns.Count)や行数(.Rows.Count)などを得ることもできる。

-