【ExcelVBA】非表示の列を特定するには

この記事では、非表示の列を特定する方法についてご説明します。

【動画】非表示の列を特定する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


マクロを実行すると非表示の列位置を特定し、(表示用に設置した)listboxに出力しています。

Excelファイルの例

今回は以下のExcelファイルを用意しました。

BからC列、GからI列、KからM列、PからR列が非表示に設定されています。

この非表示にされている列を表示するためにListboxを設置しました。

マクロを実行すると、この非表示にされている列がListboxに表示されます。

マクロ作成の流れ

STEP.1
シートのすべての列に対して非表示かどうか判定する
シートのすべての列に対して非表示かどうか判定します。
もし非表示の列が特定できた場合、その表示の列位置をListboxに表示させています。

コードの例

Option Explicit

Sub test()

    Dim ws      As Worksheet        'ワークシート変数
    Dim cnt     As Long             'カウンタ用変数
    
    'シート名を取得する
    Set ws = Worksheets("top")
    
    'Listboxをクリアする
    ListBox1.Clear
    
    '列の数だけ処理を繰り返すFor文
    For cnt = 1 To ws.Columns.Count
    
        If ws.Columns(cnt).Hidden Then
        
            '非表示の列の場合
        
            'ListBoxに非表示の列位置を出力する(アルファベット表示)
            ListBox1.AddItem Split(ws.Cells(1, cnt).Address, "$")(1)
            
        End If
        
    Next cnt

End Sub

注目すべきコード①

最初に見て頂きたいのは15行目です。

    '列の数だけ処理を繰り返すFor文
    For cnt = 1 To ws.Columns.Count

コードの説明

以上のコードは、列の数だけ処理を繰り返すFor文です。

非表示のセルを特定するため、すべてのセルの数だけ処理を繰り返します。

注目すべきコード②

次に見て頂きたいのは17行目から24行目です。

        If ws.Columns(cnt).Hidden Then
        
            '非表示の列の場合
        
            'ListBoxに非表示の列位置を出力する(アルファベット表示)
            ListBox1.AddItem Split(ws.Cells(1, cnt).Address, "$")(1)
            
        End If

コードの説明

以上のコードは、列が非表示の列なのか判定し、非表示の列の場合はListboxに列位置のアルファベットを設定するコードです。

一番左の列が非表示ならAを、左から2番目の列が非表示ならBをListboxに設定します。

コードの詳細

17行目でHiddenプロパティの値がTrueかどうか判定し、Trueの場合は22行目ではListboxに行位置を設定しています。

動作確認

「Excelファイルの例」をご覧ください。

最後に

この記事では、非表示の列を特定する方法についてご説明しました。

非表示の列を特定したいときには本記事を参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら