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

ExcelマクロVBAの基本と応用、エクセル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 ・・・新着記事一覧を見る

VBAコードの全プロシージャー・プロパィ一覧を取得|VBAサンプル集(10月12日)
VBAでエラー行番号を取得できるErl関数|VBA技術解説(10月12日)
手動計算時の注意点と再計算方法|ExcelマクロVBA技術解説(10月9日)
引数の数を可変にできるパラメーター配列(ParamArray)|VBA入門(10月7日)
VBEの使い方:デバッグ|ExcelマクロVBA入門(10月6日)
VBAにおける配列やコレクションの起点について|VBA技術解説(10月5日)
VBEの使い方:オブジェクト ブラウザー|VBA入門(10月5日)
VBEの使い方:ウォッチ ウィンドウ|VBA入門(10月4日)
VBEの使い方:ローカル ウィンドウ|VBA入門(10月3日)
VBEの使い方:イミディエイト ウィンドウ|VBA入門(10月2日)


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

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.ひらがな⇔カタカナの変換|エクセル基本操作
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.セルに文字を入れるとは(Range,Value)|VBA入門



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

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


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




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