Home » Excel VBA Rangeオブジェクト » 結合セル » VBAでセルを横方向に結合する-Range.Merge Across:=True

VBAでセルを横方向に結合する-Range.Merge Across:=True

対象:Excel2007, Excel2010, Excel2013

Excel 横方向に結合

セルを結合するExcel VBAのコードをいくつかご紹介しました。

これらのマクロを作りながら、プログラミングに慣れているけれどExcelについてあまり詳しくない方が、作ってしまいがちなマクロがあると感じたので、記事にしておきます。

セルを横方向に結合するマクロです。

[スポンサードリンク]

Excelの機能をご存知ない方が作ってしまいがちなマクロ

例えば、A1:C1セル・A2:C2セル・A3:C3セルをそれぞれ結合したい場合に、プログラミングに慣れているけれどExcelの機能をあまりご存知ない方の場合、

Sub bad_sample()
 Dim i As Long
 For i = 1 To 3
  Range(Cells(i, "A"), Cells(i, "C")).Merge
 Next
End Sub

といったマクロを作ってしまいがちです。

このマクロでも勿論、A1:C1セル・A2:C2セル・A3:C3セルをそれぞれ結合することができます。

ですがExcel VBAでは、ループ処理をしなくても、このような横方向のセル結合ができるのです。

ループ処理を使わないでセルを横方向に結合するサンプルマクロ

ループ処理を行わなくても、以下のような1行のコードで、A1:C1セル・A2:C2セル・A3:C3セルをそれぞれ結合できます。

Sub 横方向に結合する()
 Range("A1", "C3").Merge Across:=True
End Sub

ポイントはRange.Mergeメソッドの引数Acrossです。

Excel.Range.Merge

Range.MergeメソッドにはAcrossという引数を指定することができて、Trueを指定すると横方向に結合が行われるのです。

引数・AcrossにFalseを指定した、

Range("A1", "C3").Merge Across:=False

というコードの場合、横方向の結合ではなく、A1:C3セルが一つのセルに結合されます。

Range.Mergeメソッドに引数を指定しない場合は、引数・AcrossにFalseが指定されたのと同じ動きをしているのです。

Excel VBAはExcel操作の自動化が目的

Excel・Word・PowerPointなどのVBAは、人が手で行う作業を楽にすること・自動化を大きな目的として持っていて、コーディングを行っているとこの根本思想を強く感じます。

ですから、ExcelにコマンドがあればVBAで簡単にコードを書くことができますし、簡単なVBAのコードで書くことのできる処理はコマンドが存在していることがほとんどです。

これに対して、GAS(Google Apps Script)とGoogleスプレッドシートの場合、Googleスプレッッドシートをプログラミング的に処理することが根本にあるようで、よく使われるようなコマンドであっても、GASでは簡単にコーディングできないようなケースがあります。

今回ご紹介した、セルを横に結合するコマンドは、Excel 2007からはリボン上にコマンドが存在し、2003以前のバージョンでも初期状態では表に出ていないだけでコマンドとしてはちゃんと存在しています。

そして、マクロ記録を行うと、

Selection.Merge True

といったコードが作られるのです。

最終更新日時:2023-04-11 14:57

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » 結合セル » VBAでセルを横方向に結合する-Range.Merge Across:=True

「結合セル」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.