第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 ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。