VBA union関数【 複数のセル選択はいろんなことに応用可能 】
目次
union関数とは
セルを複数選択して、なにかしらの処理をしたいときに便利なのがunion関数です。unionは「結合」や「融合」といった意味であり、union関数もこれと同様の働きをします。union関数を使えば複数のセル(Range)を一つのオブジェクトとして使用することができる。
基本構造
Dim オブジェクト As Range
Set オブジェクト = union(Range(),Range())
サンプル
Dim Oj As Range
Set Oj = union(Range(“A3:C3"),Range(“G4"),Range(“K6"))
Oj.Select
サンプルの結果は以下のようになります。
「Ctrl」 + クリックで同じ操作ができます。
union関数を使ったVBA① 複数セルの数値を集計する
選択範囲が連続していないとき、union関数を使って範囲指定をすれば簡単に数値の集計が可能です。
サンプル
2行目から1つ飛ばしでセルを選択し、選択したセルの合計を集計する!というプログラムをつくってみます。For~Nextを使えば簡単に出来るところを今回はUnion関数とSumを使って計算します。
1 | Sub テスト() |
2 | Dim Te As Range |
3 | Set Te = Union(Range(“D3"), Range(“D5"), Range(“D7"), Range(“D9"), Range(“D11"), Range(“D13")) |
4 | Te.Select |
5 | Range(“D14") = Application.WorksheetFunction.Sum(Te) |
6 | End Sub |
サンプルの結果
D14セルに合計が集計されました。
union関数を使ったVBA② 複数セルの色を変える
色を変えたい範囲が連続していないとき、union関数を使って範囲指定をすれば簡単にセルの色を変えることが可能です。
サンプル
1 | Sub テスト2() |
2 | Dim Te As Range |
3 | Set Te = Union(Range(“D3"), Range(“D5"), Range(“D7"), Range(“D9"), Range(“D11"), Range(“D13")) |
4 | Te.Interior.Color = RGB(0, 255, 255) |
5 | Range(“D14") = Application.WorksheetFunction.Sum(Te) |
6 | End Sub |
unionと色を操作するVBAの組み合わせはかなり使えます。色の操作について下記の記事で詳しく紹介しています。
union関数を使ったVBA③ グラフの範囲を指定する
表からグラフを作成する際、グラフの項目としたい範囲とグラフのデータとしたい範囲が離れているとき、union関数を使って範囲指をすれば簡単にキレイなグラフを作成することが可能です。
サンプル
上記のような一覧表から棒グラフと円グラフを作成します。
1 | Sub 棒グラフ() |
2 | With ActiveSheet.Shapes.AddChart.Chart |
3 | .ChartType = xlColumnClustered |
4 | Set Ta = Range(“A3:A4") |
5 | Set Ta2 = Range(“D3:D4") |
6 | .SetSourceData Source:=ActiveSheet.Range(Ta, Ta2) |
7 | .HasTitle = True |
8 | .ChartTitle.Text = “収入・支出" |
9 | .HasLegend = False |
10 | .Axes(xlCategory).HasTitle = False |
11 | .FullSeriesCollection(1).Points(1).Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent2 |
12 | .FullSeriesCollection(1).Points(2).Format.Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent5 |
13 | End With |
14 | End Sub |
1 | Sub 円グラフ() |
2 | With ActiveSheet.Shapes.AddChart.Chart |
3 | .ChartType = xlPie |
4 | Set Ta = Range(Cells(10, 2), Cells(10, 6)) |
5 | Set Ta2 = Range(Cells(31, 2), Cells(31, 6)) |
6 | .SetSourceData Source:=Union(Ta, Ta2) |
7 | .HasTitle = True |
8 | .ChartTitle.Text = “項目別支出" |
9 | .SeriesCollection(1).ApplyDataLabels ShowPercentage:=True, ShowValue:=False |
10 | End With |
11 | End Sub |
実行結果は以下のようになります。
Union関数はグラフを作るときによく使われます
union関数とRangeのちょっとした違い
union関数はRangeよりいっぱい合体できる!!
Rangeの()内の文字数は255文字以内、unionの()内のRangeは30個以内、というそれぞれ制限があります。この制限を考慮し、セルを最大限結合するには以下のようにします。
255文字記載したRangeをunionで30個記載する
255文字 × 30個 = 7650文字
union関数を使えば7650文字分の結合ができるので、Rangeよりはるかにセルを結合できることがわかります。選択したいセルが多くなりそうだなぁと思ったときはRangeではなく、Unionを使った方が安心でしょう。
ディスカッション
コメント一覧
まだ、コメントがありません