エクセルVBA100本ノック。12本目:セル結合を解除
1 今回のお題
A1から始まる表範囲のC列に金額が入っています。
しかし、ところどころに結合されたセルがあります。
セル結合を解除し、入っている金額を整数で均等に割り振ってください。(2枚目画像)
端数処理方法は任意とします。
※結合セルには正の整数しか入っていません。
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 結合セルが何個あるのか調べる
セルの結合を解除した場合、先頭のセルに値は入るが、残りのセルは空白となってしましますね。
今回の画像の場合は3つのセルが結合されていますね。
ではでは、セルが何個結合されているのか調べる方法を解説します。
結合セル数を調べるコード
rng.MergeArea.Rows.Count
結合されているエリア(MergeArea)の列数を数える(Rows.Count)。という意味になります。結果としては「3」になります。
今回のお題で、「セル結合を解除し、入っている金額を整数で均等に割り振ってください。」とありますが、ここはあまり考えずに、結合前のデータ(500)を結合されている数(3)で割った数を代入しています。
結果以下の画像の通り166が3つのセルに代入されます。
う~ん、セルの結合は厄介ですね(;^ω^)。自分はセルの結合は使わないのですが、相手からもらったデータに結合セルがあるという場合が往々にしてあります。こういう場合にいかに楽をするか、という方法を知っておけば自分の時間はもっと増えるはず。備えの知識として覚えておいて損はなさそうです。
ではでは、このへんで(^^)/~~~