第85回.結合セルの扱い
セルが結合されていると、マクロでは時に扱いづらい事があります、
セル結合されている場合に、VBAでどのように取り扱うかを解説します。
見た目重視で作られたシートでは、セル結合が頻繁に使用されているものです。
セル結合の是非についてはひとまず置いて、ここではマクロVBAでの扱い方を解説します。
セル結合に関する、メソッド・プロパティ
UnMergeメソッド
MergeCellsプロパティ
MergeAreaプロパティ
| Merge |
Rangeオブジェクト内のセルを結合して1つのセルにします。 |
| UnMerge | 結合された領域をそれぞれのセルに分割します。 |
| MergeArea |
指定されたセルがある結合セル範囲を表すRangeオブジェクトを返します。 |
| MergeCells | セル範囲またはスタイルに結合されたセルが含まれているかどうかを調べます。 値の取得および設定が可能です。 |
MergeCellsの値について
| 値 | 説明 |
| True | 値の設定:指定したセル範囲が結合されます。 値の取得:指定したセル範囲が、結合したセル、または、結合したセルの一部である場合。別のセル結合範囲にまたがる場合はNullになります。 |
| False | 値の設定:指定したセル範囲を含むすべてのセル結合が解除されます。 値の取得:指定したセル範囲の全てのセルが結合されていない場合。 |
| Null | 値の設定:セル結合に何も影響を与えません。 値の取得:指定したセル範囲が、結合したセルと結合されていないセルの両方を含む場合。 |
セル結合のマクロVBA使用例
結合範囲内の複数セルに値が入っている場合、以下のメッセージが表示されます。

Application.DisplayAlerts = False
これをMergeより前に実行して警告表示を止めてください。


このメッセージ表示を止めるには、
Application.DisplayAlerts = False
これをMergeより前に実行して警告表示を止めてください。
セル結合されている範囲全てを指定する必要はありません。
結合範囲内のセルであればどのセルを指定しても良く、
Range("A2").UnMerge
これだけでもセル結合解除できます。
結合範囲内の複数セルのセルに値が入っている場合は警告メッセージが表示されます。
このメッセージ表示を止めるには、
Application.DisplayAlerts = False
これをMergeCellsより前に実行して警告表示を止めてください。
その範囲が既存のセル結合範囲に重なっている場合は、全てを含んだ矩形のセル範囲が結合されます。
セル結合されている範囲全てを指定する必要はありません。
結合範囲内のセルであればどのセルを指定しても良く、
Range("A2").MergeCells = False
これだけでセル結合解除できます。
セル結合されていない場合は、「$A$1」と表示されます。
A1:B3がセル結合されている場合、「3」と表示されます。
A1:B3がセル結合されている場合、「2」と表示されます。
セル結合時の値消去
Range("A1").ClearContents
これは、エラーとなります。
Clearメソッドでも同様にエラーとなります。
Range("A1").MergeArea.ClearContents
とする必要があります。
Range("A1").Value = ""
もしくは、
Range("A1:B3").Value = ""
この方が簡単な場合が多いでしょう。
ただし、この方法の場合は指定のセルが結合範囲の先頭セルを含んでいる必要があります。
Range("A1").MergeArea.ClearContents
Range("A1").MergeArea = ""
このように、MergeAreaを使って書いておいた方が無難でしょう。
指定セル範囲に結合セルが存在するか判定するマクロVBA
Sub sample()
If isMergeCells(ActiveSheet.UsedRange) Then
MsgBox "セル結合がある"
Else
MsgBox "セル結合はない"
End If
End Sub
Function isMergeCells(ByVal aRange As Range) As Boolean
If aRange.MergeCells = False Then
isMergeCells = False
Else
isMergeCells = True
End If
End Function
MergeCellsプロパティは、
指定したセル範囲が、結合したセル、または、結合したセルの一部である場合はTrueを返します。
別のセル結合範囲にまたがる場合や、結合したセルと結合されていないセルの両方を含む場合はNullを返します。
したがって、False以外(TrueまたはNull)の場合は、結合セルを含んでいることになります。
セル結合時のOffsetとResizeの注意点
A2セル~A4セルがセル結合されている場合、

Debug.Print Range("A2").Offset(1).Address
Debug.Print Range("A1").Offset(2).Address
この結果は、
$A$5
$A$3
Offsetプロパティでは、
セル結合内部から移動する場合は、結合範囲は一つとして数えられます。
セル結合外部から移動する場合は、セル結合は影響をうけません。
Debug.Print Range("A1").Resize(3).Address
Debug.Print Range("A2").Resize(3).Address
この結果は、
$A$1:$A$3
$A$2:$A$4
となります。
Rangeのプロパティは非常に沢山あります。
マクロVBA入門で重要なメソッド・プロパティは一通り紹介していますが、他のメソッド・プロパティにも目を通しておくと良いでしょう。
Rangeのプロパティ一覧 ・・・ 詳細解説ページへのリンクあり
同じテーマ「マクロVBA入門」の記事
第82回.RangeのResizeプロパティ
第83回.RangeのOffsetプロパティ
第84回.RangeのAddressプロパティ
第85回.結合セルの扱い
第86回.総合練習問題10
第88回.並べ替え(Sort)
第89回.オートフィルター(AutoFilter)
第90回.フィルターオプションの設定(AdvancedFilter)
第91回.条件付き書式(FormatCondition)
第126回.入力規則(Validation)
第92回.名前定義(Names)
新着記事NEW ・・・新着記事一覧を見る
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
