「excel VBA 非表示列の有無確認」
「vba 非表示の列があるか判断する」
といった検索キーワードで時折アクセスがあります。
特定の列が非表示かどうかを判定するには、Range.Hiddenプロパティを使います。
Range.Hiddenプロパティは、非表示であればTrue、非表示でなければ(表示されていれば)Falseを返します。
ワークシート上に非表示の列があるかどうかを判定するだけで良いのであれば、Range.Hiddenプロパティを使わない他の方法もあります。
ワークシートに非表示列があるかを判定するサンプルマクロ
以下のExcelマクロで、アクティブなワークシートに非表示列があるかどうかを判定できます。
If Columns.Count <> Rows(1).SpecialCells(xlCellTypeVisible).Count Then
MsgBox "非表示の列が有ります!"
Else
MsgBox "非表示の列はありません。"
End If
End Sub
サンプルマクロで行っているコードについて
式「Columns.Count」で、アクティブシートの列数が取得できます。
Columns.Countの戻り値は、xlsxファイルならば「16384」、xlsファイルならば「256」です。
「Rows(1).SpecialCells(xlCellTypeVisible).Count」で、アクティブシートの1行目の可視セル(見えているセル)の個数が取得できます。
Range.SpecialCells(xlCellTypeVisible)で可視セルを表すRangeオブジェクトが取得でき、Range.Countプロパティでその個数を取得している式です。
xlsxファイルで非表示になっている列が存在しなければ、「Rows(1).SpecialCells(xlCellTypeVisible).Count」の戻り値は「16384」ですが、非表示の列が存在すれば「16384」よりも少なくなります。
この判定を行っているのが、
If Columns.Count <> Rows(1).SpecialCells(xlCellTypeVisible).Count Then
です。
Home » Excel VBA Rangeオブジェクト » SpecialCellsメソッド » VBAでワークシートに非表示の列があるかどうかを判定する