11本目 結合されているセルにコメントを挿入

VBA100本ノック

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


問題

#VBA100本ノック 11本目
画像のように、シートにはところどころにセル結合があります。
これは放置しておく訳にはいきません。
セル結合されているセルには、
メモ(旧コメント)で警告文を出しましょう。
※シートは任意、警告文はご随意に

動画の流れ・解答

■考えた流れ
0:00 冒頭、問題確認
1:42 マクロの記録でコードを調べる
4:37 表範囲のセルを1セルずつループする
7:49 セル結合されているか判定する
10:24 エラーハンドリングと再実行を考慮

※動画内での回答

Sub ノック11本目()

    On Error Resume Next
    
    Dim r As Range
    For Each r In Range("A1").CurrentRegion
        r.ClearComments
        If r.MergeCells Then
            r.AddCommentThreaded ("セル結合やめて!")
        End If
    Next

End Sub

※神髄さんの解答(これ以外の方法も紹介してくれてます)

Sub VBA100_11_01()
  Dim ws As Worksheet
  Set ws = ActiveSheet
  Dim rng As Range
  For Each rng In ws.Range("A1").CurrentRegion
    If rng.MergeCells Then
      If rng.Address = rng.MergeArea(1).Address Then
        If Not rng.Comment Is Nothing Then
          rng.ClearComments
        End If
        rng.AddComment "セル結合ダメ!"
        rng.Comment.Shape.TextFrame.AutoSize = True
        rng.Comment.Visible = True
      End If
    End If
  Next
End Sub

For Eachさん、マクロの記録さんと、非常に重要な機能を紹介したぞ!!

新人君
新人君

今後もずっと
お世話になるスキルですね!!

ブチョ
ブチョ

俺にもお世話になってるよな?

新人君
新人君

自分でそんなこと言う?

マクロの記録でコードを調べる

よし!じゃあまずは!!
めちゃくちゃくちゃくちゃ重要な!!
マクロの記録という機能を使って、コメントを挿入するコードを調べるとことから!

ググっても当たらない場合、サッとコードを調べたい場合に使うことが多いぞ!!

使い方!!
「開発」→「マクロの記録」→コードを調べたい操作を行う→「記録終了」

コメントを挿入して、確認してみると…↓

ただし!!セルを選択したり、ウィンドウをスクロールしたり…
記録開始から終了まで行った操作が全て記録されるから…
予めセルを選択したり、工夫が必要だぞ!!

表範囲のセルを1セルずつループする(For Eachステートメント)

うっしゃ!!じゃあお次も!!
超々超超々超超超超々超重要な構文!!
For Eachステートメントさんというものを使って、
コレクション処理をしていくぞ!

今回は表範囲(Range(“A1”).CuurentRegion)に対して、一セルずつループしていきたい!!

書き方はこんな感じだ!!
For Each ○○ In ○○の集合体

Next
って感じ!!!

ちなみに、○○の部分は変数にする必要があるから気を付けてくれ!!
今回は”セル”をループさせたいので、Rangeって型にしているが…
ここは分からんくてもまだ大丈夫だ!!!www

動きについても動画にしてるから…
これは動画を見てくれ!!ww

セル結合されているか判定する

んよっし!お次は…
セル結合されているか判定して、結合されてたところだけ
「コメントを挿入するコード」を実行させてあげよう!!

一旦、記録されたコードを(Range.AddCommentThreaded)
For Nextの中に入れてあげて…

条件分岐はIF!(これはそろそろ覚えていこう!)
そして…セル結合されているかどうかはMergeCellsプロパティさんだ!!(これはググろう!!)

あ、ちなみに…
「If r.MergeCells Then」のところ…
初心者さんなら「If r.MergeCells = True Then」じゃないの??って思うと思うんだが…

合ってるぞ!合ってるんだが…

Trueの時に処理したい時は、 = Trueは入れなくていいんだ!

よし!これで一度実行すると…!
うん!!途中でエラーになるね!!!

セル結合されてるところに、2回コメントを入れようとしたからだね!!
お次の章ではココを回避していこう!

エラーハンドリングと再実行を考慮

よし!最後に!!
エラーハンドリングと再実行を考慮して終わるぞ!!!
この辺がわからない方は9本目の動画を見直してみてくれ!!

よし!お次は再実行の考慮!!!
セル結合をコメントで警告して…よし!修正したぜ!!!ってなった時に…
修正したところのコメントは消してあげたいからね!

よし!これはもう…
ググれ!!!!
ClearCommentsメソッドさんを使えばコメントだけ消せるから…こんな感じだ!↓

最初に一括で消してもいいと思うぞ!

実行結果↓

オツカレサマデシタ!

ブチョ
ブチョ

お疲れ様!
様様様!

新人君
新人君

さまでした!

あとがたり

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

いやいや、今回に詰め込みすぎましたか?もしかして?
私、またなんかやっちゃいました?(暇空さん風)

マクロの記録なんか、ノック100本目でもがっつり使ってますし、
For Eachさんなんか…100本中30本ぐらいで使ってなかったっけ?(適当)

とにかく、11本目が超重要回になってしもた…
よく見て勉強してくれい!!

あ、それはそうと…
前回の10本目から…約1ヶ月空いてしまいました!!
すんません!
これからはもうほんのちょっとだけ頑張ります!!

理由は…

ババン!!
3時間ぐらいの動画を、1ヶ月かけて作ってたからですぅ~!!

良かったら見てくだせぇ!!!
Excel お宝さがしゲーム とかでyoutubeでググったら出てくると思う!!

死ぬ気で作ったけど全然再生されてねえけどな!!!
いいんだけどな!!

みんな!今年もよろしく!!

コメント

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