エクセルVBA100本ノック。12本目:セル結合を解除

この記事から得るもの

結合解除後のセルに値を入れる。
結合セルが何個あるのか調べる方法。


1 今回のお題

A1から始まる表範囲のC列に金額が入っています。
しかし、ところどころに結合されたセルがあります。
セル結合を解除し、入っている金額を整数で均等に割り振ってください。(2枚目画像)
端数処理方法は任意とします。
※結合セルには正の整数しか入っていません。

f:id:bimori466:20201108105031p:plain

excel-ubara.com

2 今回のお題の意図

結合解除後のセルに値を入れること。

3 回答

私の最初の回答

Sub ノック12本目_1()

Dim ws As Worksheet: Set ws = Worksheets("sheet1")
Dim rng As Range

For Each rng In ws.Range("A1").CurrentRegion
    If rng.MergeCells Then
        amount = rng.Value  '結合の値
        mergeCount = rng.MergeArea.Rows.Count  '結合されている数を数える
        addAmount = WorksheetFunction.RoundDown(amount / mergeCount, 0)
        
        rng.UnMerge '結合解除
        
        '結合解除後のセルに値を代入
        For i = 0 To mergeCount - 1
            rng.Offset(i, 0) = addAmount
        Next
        
    End If
Next

End Sub


ポイントとしては、結合セルが何個あるのか??を知ることです。次項で解説します。

4 結合セルが何個あるのか調べる

セルの結合を解除した場合、先頭のセルに値は入るが、残りのセルは空白となってしましますね。

f:id:bimori466:20201108110034p:plain

今回の画像の場合は3つのセルが結合されていますね。
ではでは、セルが何個結合されているのか調べる方法を解説します。

結合セル数を調べるコード

rng.MergeArea.Rows.Count

結合されているエリア(MergeArea)の列数を数える(Rows.Count)。という意味になります。結果としては「3」になります。


今回のお題で、「セル結合を解除し、入っている金額を整数で均等に割り振ってください。」とありますが、ここはあまり考えずに、結合前のデータ(500)を結合されている数(3)で割った数を代入しています。


結果以下の画像の通り166が3つのセルに代入されます。
f:id:bimori466:20201108111040p:plain


う~ん、セルの結合は厄介ですね(;^ω^)。自分はセルの結合は使わないのですが、相手からもらったデータに結合セルがあるという場合が往々にしてあります。こういう場合にいかに楽をするか、という方法を知っておけば自分の時間はもっと増えるはず。備えの知識として覚えておいて損はなさそうです。

ではでは、このへんで(^^)/~~~