【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でエクセル業務の効率化を実現

VBAを活用することで、エクセルでの日常業務を劇的に効率化できます。

VBAを使えば、

繰り返し作業の自動化によって人的ミスを削減し、作業時間を大幅に短縮する

ことが可能です。

 

毎日行っているデータ集計やレポート作成を自動化すれば、数時間かかっていた作業がボタン一つで数分で完了します。

エクセル作業が多い環境ではVBAの導入は必須事項である!といっても過言ではありません。

 

マクロを導入するメリット

マクロを導入する最大のメリットは、作業時間の短縮と品質の向上を同時に実現できることです。

人間が時間をかけて行う単純作業をコンピュータが正確かつ高速に処理することができます。

 

たとえば、手作業で1時間かかっていたデータ整理が、マクロなら数秒で完了し、さらに計算ミスや入力間違いも完全に防げます。

また、一度作成したマクロは何度でも使い回せるため、長期的な業務効率化投資としても非常に価値があります。

 

結果として、マクロ導入は時間コストの削減と業務品質の向上という二重のメリットをもたらします。

 

VBA学習の始め方

VBA学習の最も効果的な始め方は、実際の業務課題から出発することです。

目的が明確な学習は記憶定着率が高く、モチベーションも維持しやすいのは間違いありません。

 

たとえば、毎週行っているデータ集計作業を自動化することを目標に設定し、必要な機能から順番に覚えていけば実践的なスキルがすぐに身につきます。

 

基本的な変数の使い方から始まり、ループ処理、条件分岐、配列など、段階的にレベルアップしていくことで、確実にVBAをマスターできます。

 

関連記事「VBA初心者必見!マクロの作り方」では、コードを書く画面の開き方や書いたコードの実行方法が図やサンプルコードを使って紹介されています。

 

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

業務内容に合わせた効率化マクロを導入したいけど、VBAコードを開発する時間がない。。。どうやってプログラムを組めばいいかわからない。。。

 

このような方は、マクロ開発を外注に依頼しちゃいましょう。

 

外注依頼することで本業に集中しながら高品質なマクロを即座に導入することができます。

 

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

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

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

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

 

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

 

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

 

 

 

効率化マクロを導入してエクセル業務の効率をアップさせましょう。