エクセルVBA100本ノック。11本目:セル結合の警告

この記事から得るもの

結合されているセルに対して、「結合禁止」などのコメントが可視的に確認が可能。


1 今回のお題

11…同じ数字が並んでいる、これは結合したのか、、、

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

f:id:bimori466:20201108073827p:plain

excel-ubara.com

2 今回のお題の意図

結合されているセルに警告文を表示し、解除してもらうもしくは自分で結合セルを探す際に、可視的に確認できる。

セルの修正をやりやすくする。

3 回答

正直、今回のお題はまったく回答が浮かびませんでした。
なので、みなさんの回答を参考にしつつ勉強させてもらいます。

私の最初の回答

Sub ノック11本目_1()

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

For k_union = 2 To ws.Cells(Rows.Count, 1).End(xlUp).Row

If ws.Cells(k_union, 3).MergeCells Then
    If ws.Cells(k_union, 3).Comment Is Nothing Then
        ws.Cells(k_union, 3).AddComment "セル結合ダメ!"
        ws.Cells(k_union, 3).Comment.Visible = True
    End If
End If

Next

End Sub

ws.Cells(k_union, 3).Comment.Visible = True、この部分でエラーとなってしまいます。
セルが結合されているかどうかを探す場合は、CellsよりもRangeを使って探す方がよいということが分かりました。

4 サイトの模範解答

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 rng In ws.Range("A1").CurrentRegion」と記述されています。つまり、Rangeで結合されているのか探すのですね。

セルが結合されているかどうか判断する。

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


セルにコメントを入れる。
コメントのテキストサイズに合わせて、コメントFrameのサイズを自動調整する。
コメントを可視化する。


非常に、勉強になりました。
自分では結合セルは作らないようにしているのですが、他人が作ったものならいざ知らず作成されているものですよね(;^ω^)。
一つ一つ探すのも大変ですから、こういう処理を知っておくと非常に便利ですね。相手に、「コメントの入ってる部分は結合解いて再提出」と指摘もしやすいです。

5 一言

今回は、完全にお勉強会となってしまいました。
しかし、過去に4000品目のデータで結合しているエグいデータをもらったことがあるので、知っておくと便利でしょう。
勉強になりました。