ExcelマクロVBA入門
第85回.結合セルの扱い

Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
最終更新日:2019-07-15

第85回.結合セルの扱い


セルが結合されていると、マクロでは時に扱いづらい事があります、
セル結合されている場合に、VBAでどのように取り扱うかを解説します。


そもそも、やたらにセル結合すべきではないのですが、
見た目重視で作られたシートでは、セル結合が頻繁に使用されているものです。
セル結合の是非についてはひとまず置いて、ここではマクロVBAでの扱い方を解説します。

セル結合に関する、メソッド・プロパティ

Mergeメソッド
UnMergeメソッド
MergeCellsプロパティ
MergeAreaプロパティ


Merge

Rangeオブジェクト内のセルを結合して1つのセルにします。
構文:式.Merge(Across)
行ごとに別のセルを作成する場合は True を指定します。

UnMerge 結合された領域をそれぞれのセルに分割します。
MergeCells

Trueの場合、セル範囲に結合セルが含まれます。
値の取得および設定が可能です。

MergeArea

指定されたセルがある結合セル範囲を表すRangeオブジェクトを返します。
指定されたセルが結合セル範囲にない場合、このプロパティは指定されたセルを返します。
値の取得のみ可能です。


セル結合のマクロVBA使用例

Range("A1:B3").Merge
A1:B3セル範囲をセル結合します。
結合範囲内の複数セルのセルに値が入っている場合、以下のメッセージが表示されます。

マクロ VBA セル結合

このメッセージ表示を止めるには、

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

Range("A1:B3").Merge Across:=True
A1:B3セル範囲を横方向にセル結合します。

マクロ VBA セル結合

行ごとに別々のセル結合になります。

マクロ VBA サンプル画像

同一行の複数セルに値が入っている場合、警告メッセージが表示されます。
このメッセージ表示を止めるには、
Application.DisplayAlerts = False
これをMergeより前に実行して警告表示を止めてください。

Range("A1:B3").UnMerge
A1:B3セル範囲の結合を解除し単体セルに分割します。
セル結合されている範囲全てを指定する必要はありません。
結合範囲内のセルであればどのセルを指定しても良く、
Range("A2").UnMerge
これだけででセル結合解除できます。
Range("A1:B3").MergeCells = True
A1:B3セル範囲をセル結合します。
結合範囲内の複数セルのセルに値が入っている場合は警告メッセージが表示されます。
このメッセージ表示を止めるには、
Application.DisplayAlerts = False
これをMergeCellsより前に実行して警告表示を止めてください。
Range("A1:B3").MergeCells = False
A1:B3セル範囲の結合を解除し単体セルに分割します。
セル結合されている範囲全てを指定する必要はありません。
結合範囲内のセルであればどのセルを指定しても良く、
Range("A2").MergeCells = False
これだけでセル結合解除できます。
MsgBox Range("A1").MergeArea.Address
A1:B3がセル結合されている場合、「$A$1:$B$3」と表示されます。
セル結合されていない場合は、「$A$1」と表示されます。
MsgBox Range("A1").MergeArea.Rows.Count
セル結合されている行数を表示します。
A1:B3がセル結合されている場合、「3」と表示されます。
MsgBox Range("A1").MergeArea.Columns.Count
セル結合されている列数を表示します。
A1:B3がセル結合されている場合、「2」と表示されます。

セル結合時の値消去

A1:B3セル範囲が結合されている場合、
Range("A1").ClearContents
これは、エラーとなります。

Clearメソッドでも同様にエラーとなります。
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) Then
    MsgBox "セル結合がある"
  Else
    MsgBox "セル結合はない"
  End If
End Sub

Function isMergeCells(ByVal ws As Worksheet) As Boolean
  Dim myRange As Range
  For Each myRange In ws.UsedRange
    If myRange.MergeCells Then
      isMergeCells = True
      Exit Function
    End If
  Next
  isMergeCells = False
End Function

セル結合されているだけでUsedRangeとなりますので、この範囲を確認すれば済みます。
必要に応じて適宜変更してお使いください。


Rangeのプロパティは非常に沢山あります。
マクロVBA入門で重要なメソッド・プロパティは一通り紹介していますが、他のメソッド・プロパティにも目を通しておくと良いでしょう。
Rangeのプロパティ一覧 ・・・ 詳細解説ページへのリンクあり

エクセルの基本であるRangeオブジェクトのプロパティの一覧です。太字リンク付きは詳細解説ページまたは応用したVBAコードがあるページにリンクしています。Excel2010までのRangeオブジェクトのプロパティ一覧 Excel2016で追加されたRangeオブジェクトのプロパティ一覧 CommentThreaded 範囲の左上隅のセルに関連付けられてい…
Rangeのメソッド一覧 ・・・ 詳細解説ページへのリンクあり
エクセルの基本であるRangeオブジェクトのメソッドの一覧です。太字リンク付きは詳細解説ページまたは応用したVBAコードがあるページにリンクしています。Excel2010までのRangeオブジェクトのメソッド一覧 Excel2013で追加されたRangeオブジェクトのメソッド一覧 FlashFill Trueは



同じテーマ「マクロVBA入門」の記事

第82回.RangeのResizeプロパティ
第83回.RangeのOffsetプロパティ
第84回.RangeのAddressプロパティ
第85回.結合セルの扱い
第86回.総合練習問題10
第87回.WorksheetFunction(ワークシート関数を使う)
第88回.並べ替え(Sort)
第89回.オートフィルタ(AutoFilter)
第90回.フィルタオプションの設定(AdvancedFilter)
第91回.条件付き書式(FormatCondition)
第92回.名前定義(Names)


新着記事NEW ・・・新着記事一覧を見る

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



  • >
  • >
  • >
  • 結合セルの扱い

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ