UnionCell|Nothing対応Union処理 | Excel VBA
- yuji fukami
- 1月5日
- 読了時間: 3分

<概要 (VBAでのUnion関数の代替)>
UnionCellは、Excel VBAで複数セル範囲を結合する際に使用する汎用プロシージャです。
標準のUnion関数は、引数にNothingが含まれるとエラーになるため、条件分岐を都度記述する必要があります。
本プロシージャでは、2つのRangeのうち片方または両方がNothingの場合でも安全に結合処理を行えるように設計されています。
セルの動的収集や、条件付きでRangeを追加していく処理において、UnionCellを利用することでコード量を減らし、可読性と保守性を向上させることができます。
UnionCellは、Nothingチェックを内包したUnion代替処理として、実務で頻繁に利用できる汎用プロシージャです。
<実行例>
実行例のサンプルコードは次の通りです
UnionCellを使わない場合の特徴
Demo_NotUse_UnionCell では、VBA標準の Union 関数をそのまま使用しています。
この場合、結合先の Rng が Nothing の状態で Union を実行するとエラーになるため、毎回以下のような判定処理が必要になります。
Rng が Nothing かどうかを判定
Nothing の場合はそのまま代入
Nothing でない場合のみ Union を実行
結果として、セルを1つ結合するだけの処理であっても、If ~ Else ~ End If を含む複数行のコードを書く必要があります。
この判定はループのたびに繰り返されるため、処理の本質である「セルを結合する」という意図が、分岐コードに埋もれてしまいがちになります。
UnionCellを使う場合の特徴
一方、Demo_Use_UnionCell では、UnionCell 関数を利用してセル結合を行っています。
UnionCell は内部で Nothing 判定を行うため、呼び出し側では Range が Nothing かどうかを一切意識する必要がありません。
その結果、ループ内の結合処理は次の1行だけで完結します。
UnionCellを使わない場合に必要だった5行程度の判定・分岐処理が、1行の関数呼び出しに集約されていることが分かります。
比較から分かるポイント
この2つのコードを比較すると、UnionCell を使うことで次のようなメリットが得られます。
Nothing 判定を毎回書かなくてよくなる
ループ内のコード量が大幅に減る
処理の意図(セルを結合する)が直感的に伝わる
同じ処理を何度書いてもミスが起きにくい
特に、条件付きでセルを収集する処理や、ループで Range を順次結合していくような実務コードでは、UnionCell を使うことでコーディング負荷を大きく下げることができます。
まとめ
UnionCell は、「Union を書くたびに必要になる Nothing 判定」を関数側にまとめて押し込むための汎用プロシージャです。
その結果、5行かかっていた処理を1行で書けるようになるという点が、本サンプルから直感的に理解できます。
セル結合処理を多用する場面では、UnionCellを導入するだけでコード全体がすっきりし、保守しやすい構成になります。
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。

