【VBA】Unionメソッドでセルを結合する方法!離れたセルをまとめて取得し作業効率アップ

【VBA】Unionメソッドでセルを結合する方法!離れたセルをまとめて取得し作業効率アップ

 

離れたセルに同じ処理を何度も繰り返すのは面倒だな。。。複数のセルを1つにまとめて処理をしたい

 

こんな問題はUnionメソッドを使えばすぐに解決できます。

 

Unionメソッドを使えば、

バラバラに配置されたセルを一つにまとめて一度の操作で処理する

ことが可能です。

 

この記事では、Unionメソッドの基本的な使い方から実務で即戦力となる応用テクニックまでを、実際に動作するサンプルコードとともに詳しく解説します。

初心者の方でも理解できるよう、専門用語は分かりやすく説明し、段階的に学習できる構成にしました。

 

この記事を読み終える頃には、あなたのVBAスキルが格段に向上し、Excel作業が驚くほど効率化されることでしょう。

 

広告

VBAのUnionメソッドとは?基本概念を理解しよう

VBAのUnionメソッドは、離れた複数のセル範囲を一つのRangeオブジェクトにまとめる機能です。

 

通常のセル結合とは異なり、

物理的にセルを結合するのではなく論理的に複数の範囲を統合してまとめて操作できる

という特徴があります。

 

たとえば、

A1セルとC3セル、E5セルといった離れたセルを一つのグループとして扱い、背景色を変更したり値を入力したり

することが可能です。

 

このため、効率的なマクロ作成において欠かせない重要な機能となっています。

大量のデータを処理するようなマクロに必要不可欠な機能といっても過言ではありません。

 

Application.Unionメソッドの基本構文

UnionメソッドはApplication.Union()という形で使用し、複数のRangeオブジェクトを引数に指定します。

 

Unionメソッドの基本構文がこちら

Application.Union(Range1, Range2, ...)

 

最大で30個までの範囲を同時に結合できるため、大量のデータ処理作業にも活用できます。

 

Unionメソッドを使った基本的なサンプルコードがこちら

Dim unionRange As Range
Set unionRange = Application.Union(Range("A1"), Range("C3"), Range("E5"))

 

上記のコードは、

A1セル、C3セル、E5セルを一つのRangeオブジェクトとして統合する

という内容です。

 

統合後は、変数「unionRange」を通じて、まとめて操作を行うことができます。

 

セル結合との違い|Union結合の特徴

Unionメソッドと通常のセル結合(Mergeメソッド)は全く異なる機能です。

セル結合は物理的にセルを一つにまとめてしまうため、元のセル構造が変わってしまいます。

一方、Unionメソッドは元のセル構造を保持したま、論理的に複数の範囲をグループ化する機能です。

 

たとえば、

A1セルとC3セルをMergeで結合するとA1からC3までの範囲が一つのセルになってしまいますが、

Unionメソッドではそれぞれのセルが独立した状態を保ちながら同じ処理を適用できます。

 

UnionメソッドとMergeメソッドの違いを比較するサンプルコードがこちら

' セル結合の例(非推奨)
Range("A1:C3").Merge

' Unionメソッドの例(推奨)
Dim unionRange As Range
Set unionRange = Application.Union(Range("A1"), Range("C3"))
unionRange.Interior.Color = RGB(255, 255, 0)

 

このように、Unionメソッドは元のセル構造を維持しながら効率的な操作を可能にします。

 

複数のRangeオブジェクトを1つにまとめる仕組み

Unionメソッドはメモリ上で複数のRangeオブジェクトの参照を管理し、一つの統合されたRangeオブジェクトを作成します。

 

この仕組みにより、離れた範囲でも同じメソッドやプロパティを一度に適用することが可能。

 

内部的には、各範囲の座標情報を保持し、処理時にそれぞれの範囲に対して順次実行される仕組みです。

 

たとえば、

背景色を変更する処理を実行すると、統合された範囲内のすべてのセルに対して同じ色が適用させる

ことができます。

 

Dim multiRange As Range
Set multiRange = Application.Union(Range("A1:A3"), Range("C1:C3"), Range("E1:E3"))
multiRange.Font.Bold = True
multiRange.Interior.Color = RGB(200, 200, 255)

 

上記のコードは、

A列、C列、E列の1行目から3行目までのセルすべてに、太字設定を施し背景色を変化させる

という内容です。

 

Unionメソッドの具体的な使い方|実践的なコード例

Unionメソッドを実際に使用する際は、まず結合したい範囲を明確にし、適切な変数に代入してから処理を実行することが重要です。

 

Range変数を使用してUnionメソッドの結果を格納後に必要な処理を実行させると複数の範囲を効率的に操作することが可能。

 

実際のエクセル業務でいうと、

データの入力、書式設定、計算処理のような手作業での処理に時間のかかる作業の効率化

に繋がります。

 

ここからは、基本的な使用方法から応用的なテクニックまでを段階的に解説します。

 

基本的な使用方法|2つのセル範囲を結合する

最も基本的な使用方法は、2つのセル範囲を結合して同じ処理を適用することです。

この方法をマスターすれば、より複雑な操作への基礎が身につきます。

 

離れた2つのセル範囲を結合するサンプルコードがこちら

Sub BasicUnionExample()
Dim combinedRange As Range
Set combinedRange = Application.Union(Range("A1:A5"), Range("C1:C5"))

' 結合した範囲に値を入力
combinedRange.Value = "統合範囲"

' 結合した範囲の書式を設定
combinedRange.Font.Color = RGB(255, 0, 0)
combinedRange.Interior.Color = RGB(255, 255, 0)
End Sub

上記のコードは、

A1からA5までの範囲とC1からC5までの範囲に「統合範囲」という文字が入力され、文字色が赤、背景色が黄色に設定される

という内容です。

 

実行結果がこちら

離れた2つのセル範囲を結合するサンプルコードの実行結果

 

複数セルの編集を同時に処理できます。

 

3つ以上のセル範囲をまとめて取得する方法

Unionメソッドは3つ以上の範囲も同時に結合できます。

複数の範囲を扱う際は、それぞれの範囲が重複しないよう注意しましょう。

 

4つの異なる範囲を結合して処理するサンプルコードがこちら

Sub MultipleRangeUnion()
Dim multiRange As Range
Set multiRange = Application.Union(Range("A1:A3"), Range("C5:C7"), Range("E9:E11"), Range("G13:G15"))

' 結合した範囲に連番を入力
Dim i As Integer
i = 1
For Each cell In multiRange
cell.Value = i
i = i + 1
Next cell

' 結合した範囲の境界線を設定
multiRange.Borders.LineStyle = xlContinuous
multiRange.Borders.Weight = xlMedium
End Sub

上記のコードは、

4つの異なる範囲を結合。それぞれのセルに連番を入力し境界線を表示する

という内容です

 

実行結果がこちら

4つの異なる範囲を結合して処理するサンプルコードの実行結果

 

Unionメソッドで複数のセル範囲を一つのRangeオブジェクトにまとめる

For Each文を使って全てのセル範囲に処理を実行する

 

大量のセルを同時に編集する業務への導入がおすすめです。

 

関連記事「For Each文の使い方」では、複数のオブジェクトを繰り返し処理するやり方が紹介されています。

 

 

 

変数を使った動的なセル範囲の結合テクニック

実際の業務では、固定の範囲ではなく、状況に応じて動的に範囲を決定することが多くあります。

変数を使用することで、より柔軟で実用的なコードの作成が可能です。

 

入力内容に基づいて動的に範囲を結合するサンプルコードがこちら

Sub DynamicUnionExample()
Dim startRow As Integer, endRow As Integer
Dim dynamicRange As Range

' 動的に範囲を決定
startRow = 1
endRow = 10

' 複数の列の同じ行範囲を結合
Set dynamicRange = Application.Union(Range("A" & startRow & ":A" & endRow), _
Range("D" & startRow & ":D" & endRow), _
Range("G" & startRow & ":G" & endRow))

' 結合した範囲に条件付き書式を適用
dynamicRange.Interior.ColorIndex = 6
dynamicRange.Font.Bold = True
End Sub

上記のコードは、

開始行と終了行を変数で管理し、A列、D列、G列の指定した行範囲を動的に結合する

という内容です。

 

実行結果がこちら

入力内容に基づいて動的に範囲を結合するサンプルコードの実行結果

 

実務で使える!Unionメソッドの応用例

Unionメソッドは実際の業務において、データ処理の効率化やユーザビリティ向上に大きく貢献します。

 

従来の方法では複数回の処理が必要だった作業も、Unionメソッドを使用することで一度の操作で完了できるので、

処理時間の短縮とコードの簡潔化

が実現できます。

 

ここからは、実際の業務でよく使用される具体的な応用例を使って、Unionメソッドの実装方法を解説します。

 

離れたセルに同じ値を一括入力する方法

データ入力作業において、離れた位置にある複数のセルに同じ値を入力することは頻繁にあります。

Unionメソッドを使えば、離れたセルへの入力を処理できます。

 

月次報告書のヘッダー部分に同じ日付を一括入力するサンプルコードがこちら

Sub BulkValueInput()
Dim headerCells As Range
Dim currentDate As String

currentDate = Format(Now(), "yyyy年mm月dd日")

' 離れたヘッダーセルを結合
Set headerCells = Application.Union(Range("B2"), Range("F2"), Range("J2"), Range("N2"))

' 一括で日付を入力
headerCells.Value = currentDate
headerCells.Font.Bold = True
headerCells.HorizontalAlignment = xlCenter
End Sub

上記のコードは、

B2、F2、J2、N2セルに現在の日付を一括入力し、同時に太字とセンタリングの書式を適用する

という内容です。

 

実行結果がこちら

月次報告書のヘッダー部分に同じ日付を一括入力するサンプルコードの実行結果

 

 

 

複数範囲のセルを一度に書式設定する

レポートや資料作成時に、複数の範囲に同じ書式を適用することは一般的です。

Unionメソッドを使用することで、めんどうな書式設定作業を瞬時に処理することが可能です。

 

売上データの重要な項目に統一した書式を適用するサンプルコードがこちら

Sub UnifiedFormatting()
Dim importantRanges As Range

' 重要なデータ範囲を結合
Set importantRanges = Application.Union(Range("C3:C10"), Range("E3:E10"), Range("G3:G10"))

' 統一書式を適用
With importantRanges
.Font.Name = "Arial"
.Font.Size = 12
.Font.Bold = True
.Interior.Color = RGB(230, 230, 250)
.Borders.LineStyle = xlContinuous
.NumberFormat = "#,##0"
End With
End Sub

 

上記のコードは、

売上金額、利益、前年比などの数値データを見やすい書式に編集する

という内容です。

 

実行結果がこちら

売上データの重要な項目に統一した書式を適用するサンプルコードの実行結果

 

数値データを見やすい書式に変更することができます。

 

グラフのデータ範囲を効率的に指定する

グラフ作成時に離れた範囲のデータを使用する場合、Unionメソッドを活用することで効率的にデータ範囲を指定できます。

 

売上データから特定の月のデータのみを抽出してグラフを作成するサンプルコードがこちら

Sub CreateChartWithUnion()
Dim chartRange As Range
Dim chartObj As ChartObject

' 1月、4月、7月、10月のデータを結合
Set chartRange = Application.Union(Range("A1:B2"), Range("A5:B6"), Range("A9:B10"), Range("A13:B14"))

' グラフを作成
Set chartObj = ActiveSheet.ChartObjects.Add(Left:=200, Top:=50, Width:=400, Height:=300)

With chartObj.Chart
.SetSourceData Source:=chartRange
.ChartType = xlColumnClustered
.HasTitle = True
.ChartTitle.Text = "四半期売上比較"
End With
End Sub

 

上記のコードは、

Unionメソッドで取得した数値をグラフのデータソースとして使用する

という内容です。

 

実行結果がこちら

売上データから特定の月のデータのみを抽出してグラフを作成するサンプルコードの実行結果

 

説の数値を変更すれば自動的にグラフも変更されます。

 

 

条件に基づいてセルをまとめて操作する

実際の業務では、特定の条件を満たすセルのみを選択して操作することが多くあります。

Unionメソッドとループ処理を組み合わせることで、条件に基づいた柔軟な操作が可能です。

 

売上目標を達成したセルのみを強調表示するサンプルコードがこちら

Sub ConditionalUnionOperation()
Dim targetRange As Range
Dim cell As Range
Dim salesRange As Range

Set salesRange = Range("C2:C20")

' 目標値(100万円)を超えたセルを結合
For Each cell In salesRange
If cell.Value > 1000000 Then
If targetRange Is Nothing Then
Set targetRange = cell
Else
Set targetRange = Application.Union(targetRange, cell)
End If
End If
Next cell

' 条件を満たしたセルの書式を変更
If Not targetRange Is Nothing Then
targetRange.Interior.Color = RGB(144, 238, 144)
targetRange.Font.Bold = True
End If
End Sub

 

上記のコードは、

売上金額が100万円を超えたセルのみを緑色の背景色に変更する

という内容です。

 

実行結果がこちら

売上目標を達成したセルのみを強調表示するサンプルコードの実行結果

 

条件分岐の中でUnionメソッド使用するテクニックはエクセル業務の効率化に必須事項です。

自由に設定できるようにしましょう。

 

AreasプロパティとUnionメソッドの組み合わせ

UnionメソッドとAreasプロパティを組み合わせることで、より高度で柔軟な範囲操作が可能になります。

  • 結合された範囲内の各エリアに対して個別の処理を実行する
  • 特定のエリアのみを選択して操作する

 

Areasプロパティを使えばUnionメソッドで結合された範囲を個別のエリアとして扱えるようになるので、複雑なデータ処理や高度な書式設定が可能となります。

 

複雑で手間のかかるエクセル業務を効率化するために、UnionメソッドとAreasプロパティの組み合わせを自由に扱えるようにしましょう。

 

Areasプロパティの基本的な使い方

Areasプロパティは、Unionメソッドで結合された範囲を個別のエリアとして取得する機能です。

結合された範囲内の各エリアには、Areas(1)、Areas(2)といったようにインデックス番号でアクセスすることが可能。

 

これにより、「統合された範囲内の特定のエリアのみ処理する」といった設定にできます

 

UnionメソッドとAreasプロパティを組み合わせサンプルコードがこちら

Sub AreasPropertyBasic()
Dim unionRange As Range
Dim i As Integer

' 3つの範囲を結合
Set unionRange = Application.Union(Range("A1:A3"), Range("C1:C3"), Range("E1:E3"))

' 各エリアに異なる色を適用
For i = 1 To unionRange.Areas.Count
Select Case i
Case 1
unionRange.Areas(i).Interior.Color = RGB(255, 200, 200)
Case 2
unionRange.Areas(i).Interior.Color = RGB(200, 255, 200)
Case 3
unionRange.Areas(i).Interior.Color = RGB(200, 200, 255)
End Select
Next i
End Sub

 

上記のコードは、

結合された3つのエリアにそれぞれ異なる背景色を適用する

という内容です。

 

実行結果がこちら

UnionメソッドとAreasプロパティを組み合わせサンプルコードの実行結果

 

Unionメソッドで結合した範囲を個別に操作する

結合された範囲内の各エリアに対して、個別に異なる処理を実行することで、より複雑で実用的な機能を実現できます。

 

売上データの各地域に応じて異なる処理を適用するサンプルコードがこちら

Sub IndividualAreaOperation()
Dim regionsRange As Range
Dim areaIndex As Integer

' 各地域の売上データ範囲を結合
Set regionsRange = Application.Union(Range("B2:B10"), Range("D2:D10"), Range("F2:F10"))

' 各地域に異なる処理を適用
For areaIndex = 1 To regionsRange.Areas.Count
With regionsRange.Areas(areaIndex)
Select Case areaIndex
Case 1 ' 東京地域
.Interior.Color = RGB(255, 230, 230)
.Font.Color = RGB(150, 0, 0)
Case 2 ' 大阪地域
.Interior.Color = RGB(230, 255, 230)
.Font.Color = RGB(0, 150, 0)
Case 3 ' 名古屋地域
.Interior.Color = RGB(230, 230, 255)
.Font.Color = RGB(0, 0, 150)
End Select

' 各地域の平均値を計算
.Offset(0, 1).Value = WorksheetFunction.Average(.Cells)
End With
Next areaIndex
End Sub

 

上記のコードは、

各地域の売上データに地域別の色分けを行い、同時に平均値を計算して隣接セルに表示する

という内容です。

 

 

VBA初心者が『Unionメソッドを使った効率化VBA』を導入する方法

VBA初心者が『Unionメソッドを使った効率化VBA』を導入する方法

 

VBAなんて扱ったことないけど、『複数のセルをまとめて編集できる効率化VBA』を導入したい!

 

こんな問題を解決する方法がこちら

  • マクロの開発を外注に依頼する
  • マクロが設定されたエクセルファイルをダウンロードする
  • 参考書やネットでVBAスキルを身に付ける

 

VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、

今では自分で効率化マクロをサクッと導入しちゃいます。

 

完成されたマクロを使ってエクセル業務を処理する

作業効率が2倍以上アップ!!

便利すぎて自分でもマクロを設定したいと考え始める

参考書やネットの情報でVBAスキルを身に付ける

マクロ開発を代行できる程のスキルを習得

 

 

VBAは

他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

という特徴があります。

 

外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。

いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。

 

あなたに合った方法で導入しちゃいましょう。

 

マクロ開発を外注に依頼する

マクロ開発を外注に依頼する方法は

VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法

です。

 

「こんなデータ抽出作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」

こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

 

Left Caption

ガッツポーズの人

完成まで本業に集中できるので効率的

 

 

デメリットは、費用がかかることだけ。

開発内容、依頼先によってかかる費用は大きく異なります。

私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

 

Left Caption

疑問がある人

ちょっと高くない。。。

 

ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。

開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、

費用が安い!スピード納期!!

でやらせてもらっています。

 

ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。

 

ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。

 

 

マクロが設定されたエクセルファイルをダウンロードする

VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、

すぐに使っているエクセルにマクロを導入することができます。

 

VBA初心者でも形になっているマクロをゲットできる、費用が安い、

というメリットがあります。

しかし、

想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要

というデメリットもあります。

 

Left Caption

ガッツポーズの人

お目当てのマクロが見つかればラッキー

 

個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。

 

今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。

 

 

 

参考書やネットでVBAスキルを身に付ける

先程も紹介しましたが、

VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい

プログラミングです。

 

言い換えると、

情報量が豊富なので自分で勉強できちゃう

ということです。

 

私のVBAスキルはほとんど独学で身に付けたもので、

考えた処理のほとんどをVBAで表現できるレベルにまで到達した!

と思っています。

 

私の作ったマクロをプロのプログラマーが見れば、

お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!

と感じるはずです。

 

でも、

私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?

 

独学であっても『複数のセルを結合するマクロ』『大量のセルをまとめて処理するマクロ』『複数のセルに連番を振るマクロ』など、

業務内容に合ったマクロを開発できるようになれます。

 

独学でVBAスキルを身に付けるコツは、

エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる

です。

 

とは言っても、全くの知識0の方は何をすればいいかわからないですよね。

 

VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。

 

VBAの知識0の方でもすいすい読み進められる内容になっています。

やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。

 

実際に私はこの参考書を読んでからVBAの勉強を始めました。

 

Left Caption

ひらめく人

VBA学習スタートのきっかけをくれた参考書


 

 

VBAの魅力を発見した後は、

ひたすら自動化したい内容のコードを書くだけ

です。

 

【VBA セル結合】【VBA 離れたセルを結合】でネット検索すれば知りたいコードをすぐにゲットできます。

 

実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると

自然といろんなマクロが作れるようになっているはずです。

 

VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。