Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:セル結合の警告
#VBA100本ノック 11本目
11…同じ数字が並んでいる、これは結合したのか、、、画像のようにシートにはところどころにセル結合があります。
これは放置しておく訳にはいきません。
セル結合されているセルには、メモ(旧コメント)で警告文を出しましょう。
※シートは任意、警告文はご随意に

◇ 出題ページはこちら
ソースコード
メインモジュール
Option Explicit ' 100本ノック011:セル結合の警告 Sub 結合セルに警告コメントを挿入する() ' データ全行をループ Dim セル As Range For Each セル In WSデータ.Range("A1").CurrentRegion ' 結合先頭セルに対して処理 If Is結合先頭セル(セル) Then ' 元のコメントは削除 If セル.Comment Is Nothing Then セル.ClearComments End If ' 警告コメントを挿入 セル.AddComment "!!セル結合は禁止です!!" セル.Comment.Shape.TextFrame.AutoSize = True セル.Comment.Visible = True End If Next End Sub
汎用関数モジュール
Option Explicit ' 結合セル判定 ' 参考:https://www.limecode.jp/entry/syntax/check-mergecells-mergearea Function Is結合先頭セル(判定セル As Range) As Boolean Is結合先頭セル = (判定セル.MergeCells And 判定セル.Address = 判定セル.MergeArea.Cells(1, 1).Address) End Function Function Is結合内部セル(判定セル As Range) As Boolean Is結合内部セル = (判定セル.MergeCells And 判定セル.Address <> 判定セル.MergeArea.Cells(1, 1).Address) End Function Function Is結合セル全体(判定エリア As Range) As Boolean Is結合セル全体 = (判定エリア.MergeCells And 判定エリア.Address = 判定エリア.Cells(1, 1).MergeArea.Address) End Function
解説
セル結合を検知して警告する問題でした。
コメントの挿入についてはストレートなコードですので、
ソースコードをご覧ください。
肝心のセル結合の判定ですが、
セルの結合状況の取得にはMergeCells/MergeAreaを組み合わせて使用する必要があります。
これらのコードはいちいち書くのは面倒ですので、
解答のように汎用関数にしておくのが便利です。
特に「Is結合先頭セル」は使い勝手がとても良いので、
是非とも使用してみてください。
詳しくはこちらの記事をどうぞ。
www.limecode.jp