12本目 セル結合を解除して均等に割り振る

VBA100本ノック

VBA100本ノック12本目を動画で解説してみました。Excelの神髄さんの模範解答はコチラ


問題

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

動画の流れ・解答

■考えた流れ
0:00 冒頭、問題確認
1:48 C列をループしてセル結合を解除する
4:18 結合前のセルを変数にして解除後に均等に値を代入

※動画内での回答

Sub ノック12本目()

    Dim i As Long
    Dim Merge_rng As Range
    For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row
        If Cells(i, 3).MergeCells Then
            Set Merge_rng = Cells(i, 3).MergeArea
            Merge_rng.UnMerge
            Merge_rng.Value = Cells(i, 3).Value / Merge_rng.Count
        End If
    Next i

End Sub

均等に(整数で)割り振る部分は今回はなしだ!
難しかったからね!!ww

Dim ○○ As Range
Set ○○ = セル範囲

この書き方を覚えておいてくれ!って問題にしてみたぞ!

新人君
新人君

セル範囲を変数に
する書き方ですね!

ブチョ
ブチョ

そんなもん必要ないない!

新人君
新人君

これからめちゃくちゃ
出てくるって…

C列をループしてセル結合を解除する

よし!じゃあまずは!!
これまでの超復習だドン!!
C列の2行目から最終行までループだ!!!

ほんじゃあここから…
セル結合されてた場合、解除するコード!!

ここは前回の復習だ!!
MergeCellsプロパティで、セルが結合されているか確認することができるから…

そして!!
肝心のセル結合を解除するコードが…
この…
UnMergeメソッドさんだ!!!
頼んだ!!

実行結果↓
しっかりと結合されてるところを解除してくれてるね!!

結合前のセルを変数にして解除後に均等に値を代入

うっしゃ!!じゃあお次!!
結合前のセルを…ってなげえな!!タイトル!!

セル範囲を変数にして扱っていくぞ!!

やりたいことは、
①結合前のセル範囲を変数として持っておく。
➁セル結合を解除する。
③解除した後のセル(結合されてた範囲)に結合前の数値を結合前のセル数で割ったものを代入

ってな感じだから…順々に考えていくぞ!

まずは!
結合前の変数を「Merge_rng」とでも定義してあげて…

そして!!その変数にセル範囲を代入するには!!
このように書いてくれ!!
Set Merge_rng = Cells(i,3).MergeArea

Merge_rngに結合したセル範囲が格納できたら、
お次は結合を解除!!
Merge_rng.UnMerge

続いては、元のセル範囲に均等に割り振った金額を代入してあげればいいから…
Merge_rng.Value = Cells(i, 3).Value / Merge_rng.Count

実行結果↓
完全に均等に分けることができた…が、
金額で小数点ってなんでやねん!って人は…
神髄さんのコードを参考にしてみてね!!ww

オツカレサマデシタ!

ブチョ
ブチョ

お疲れさマントヒヒ!

新人君
新人君

お疲れさまでした!

あとがたり

おはこんばんちは。uぷ主です。
VBA100本ノック、12本目の解説となります。

いや~、前回の11本目、ちょっと色々詰め込み過ぎたかなと反省…
ゆーてまだ11本目だしね…

今回は多少条件をゆるく、動画時間も短めにしてみました。
1周目の時は1問を2つの動画に分けたりしてたんだけど…

それよりはなぁ…
短くても、1本で押さえて全部終わらせたいので…

これからもゆるく、多少条件も緩和しながらのんびり2周目していこうかなと思います!!

お疲れさまでござんした!!

寒いから体調気を付けてな!!

コメント

タイトルとURLをコピーしました