こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
毎日、誰かが作った「見た目だけ綺麗なExcel」と戦って消耗していませんか?
「なんでここ結合してんの…!!」と心の中で叫び、並び替えもフィルターもできずに手作業で修正を繰り返す。そんな地獄のような作業、もう終わりにしましょう。
今日は、Excel VBAで結合セルを自在に操るための「MergeArea」について解説します。
結合セルは「敵」ですが、VBAならコントロールできる
正直、Excelでの「セルの結合」は、データ管理の観点から言えば悪です。
しかし、慣れていない人さんや新入社員、ときには取引先が作ったデータは、見栄えのために結合されたものが山のように存在します。これを避けては通れません。
せっかくVBAで自動化しても、
「結合セルの値を取得しようとしたら、空白が返ってきた」
なんてこともよくありますよね。
例えば、A1からA3が結合されているとき、VBAで Range(“A2”).Value を取得しようとしても、結果は「空」です。Excelは結合されたセルの左上のセル(A1)にしか値を持っていないからです。
ここで役立つのが今回のテーマ、 MergeArea(マージエリア) です。
MergeAreaとは?
簡単に言うと、「そのセルが結合されている範囲全体」を教えてくれるプロパティです。
これを使えば、「A2セルが含まれている結合セルの、一番左上の値を持ってきて!」という命令が可能になります。
①結合セルの値を正しく取得するコード
このコードで、「選択したセルが結合されていても、いなくても、確実に値を拾う」ことができます。
Sub GetMergedValue()
' 選択しているセルの値を正しく取得してメッセージで表示する
Dim targetCell As Range
Dim realValue As Variant
' 現在選択しているセルをセット
Set targetCell = ActiveCell
' 【ポイント】MergeArea.Cells(1, 1)を使う
realValue = targetCell.MergeArea.Cells(1, 1).Value
MsgBox "取得した値: " & realValue
End Sub
コード解説
targetCell.MergeArea は、そのセルが結合されていれば「結合範囲全体」を、結合されていなければ「そのセル単体」を返します。
その範囲の .Cells(1, 1) (つまり1行目の1列目=左上)を指定することで、結合の有無に関わらず、常にデータが入っているセルを狙い撃ちできます。
②結合範囲全体を操作する
「結合セルの一部だけ色を変えたいのにできない!」という時も、MergeAreaを使えば可能です。
Sub ColorMergedArea()
' A1セルが含まれる結合範囲全体を黄色にする
Dim rng As Range
Set rng = Range("A1")
' MergeAreaに対して色を指定すると、結合全体に反映される
rng.MergeArea.Interior.Color = vbYellow
' 結合範囲のアドレス(番地)をイミディエイトウィンドウに表示
Debug.Print "結合範囲は: " & rng.MergeArea.Address
End Sub
最後に
セル結合しまくったフォーマットを押し付けてくる環境は、自分一人だけではどうすることもできないかもしれません。
でも、文句を言っていても何も変わりません。スキルを身につけて、せめて自分が関わる分だけでも対処していきましょう。
今回は値取得と指定色で色付けの2つを紹介しました。
もし結合セルに対して追加で何かしたい処理があれば、これらをベースにさらに処理を追加していけばOKです。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント