こんにちは、Ryoです。
Excelで使用頻度が多いものの一つとしてセルの結合があると思います。
VBAで処理する都合上、データを書き込む際に結合を解除してから書込みたい場合や、結合されたセルは除外する、データを書込みしてからセル範囲を結合する等を行いたいこともありますので、今回はそのセル結合を判定する方法について書いてみたいと思います。
1.セル結合判定サンプル
セルの結合を判定するには、以下のMergeCellsプロパティを使います。
オブジェクト.MergeCells
このオブジェクトは判定したい対象セルになり、結合されていればTrue、結合されていなければFalseが返ってきます。
また、このTrue,Falseを利用することで結合させたり解除させたり出来ます。
以下のサンプルコードはセルA1~A5を確認し、結合されていれば解除、されていなければ結合するものです。
◆サンプルコード
Sub Sample1() For i = 1 To 5 '結合した後の文字配置を中央揃えにする Cells(i, 1).HorizontalAlignment = xlCenter 'セルA1~C1の結合を判定しNot演算子で結合⇔解除を切替え Range(Cells(i, 1), Cells(i, 3)).MergeCells = _ Not Range(Cells(i, 1), Cells(i, 3)).MergeCells Next i End Sub
先ずCells(i, 1).HorizontalAlignment = xlCenter は指定セルの文字を中央配置にするものですが、サンプル実行の都合上、見栄えを考えていれていますので結合判定とは直接関係ありません。
Range(Cells(i, 1), Cells(i, 3)).MergeCells = _
Not Range(Cells(i, 1), Cells(i, 3)).MergeCells
ここで判定し、結合⇔解除を切り替えています。
MergeCellsプロパティから返ってくる値はTrueかFalseなので、Not演算子を使うことで、
True⇒False、False⇒Trueとしています。
◆サンプル実行画面
≪実行前≫
黄色塗りつぶし部分が結合されています。
≪実行後≫
この通り、結合⇔解除が切り替わっています。
切り替わった状態から再度サンプルコードを実行すれば、当然ですが元に戻ります。
◆Not演算子を使わない場合のサンプルコード
参考までにNot演算子を使わない場合のサンプルコードも載せておきます。
実行結果は上記サンプルと同じになります。
Sub Sample2() For i = 1 To 5 If Cells(i, 1).MergeCells Then Cells(i, 1).UnMerge '結合されていれば解除 Else Range(Cells(i, 1), Cells(i, 3)).Merge '結合 End If Next i End Sub
先ずMergeCellsで判定し、返ってくるTrueやFalseに対して「UnMerge」(解除)、
「Merge」(結合)を指定します。
この辺りの使い分けは処理したい内容によって都合の良い方を選定すれば良いです。
2.まとめ
MergeCellsで判定させることでTrue,Falseが返ってくるので、Not演算子と組み合わせることで切替が簡単に出来ますから、知っていると何かと役に立つ場面が多いです。
私の経験上、結合セルは一旦解除してから必要な処理を行い再度結合するという形にした方が変なエラーが出ることや想定外のセルを選択してしまうことが無いのでお薦めです。
以上、セル結合の判定についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo