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

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

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

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


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

Excelファイルの例

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

15行目から25行目、25行目から30行目、35行目から38行目が非表示に設定されています。

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

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

マクロ作成の流れ

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

コードの例

Sub test()

    Dim ws      As Worksheet        'ワークシート変数
    Dim rRng    As Range            'Rangeオブジェクト格納用変数
    
    'シート名を取得する
    Set ws = Worksheets("top")
    
    'Listboxをクリアする
    ListBox1.Clear
    
    '使用されているセルの範囲内の行数分だけ処理を繰り返すFor文
    For Each rRng In ws.UsedRange.Rows
    
        If rRng.Hidden Then
        
            '非表示の行の場合
        
            'ListBoxに非表示の行位置を出力する
            ListBox1.AddItem rRng.row
            
        End If
        
    Next rRng

End Sub

注目すべきコード①

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

    '使用されているセルの範囲内の行数分だけ処理を繰り返すFor文
    For Each rRng In ws.UsedRange.Rows

コードの説明

以上のコードは、使用されているセルの範囲内の行数分だけ処理を繰り返すFor文です。

非表示の最初のセルから非表示の最後のセルまでこのFor文内の処理を繰り返します。

注目すべきコード②

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

        If rRng.Hidden Then
        
            '非表示の行の場合
        
            'ListBoxに非表示の行位置を出力する
            ListBox1.AddItem rRng.row
            
        End If

コードの説明

以上のコードは、行が非表示の行なのか判定し、非表示の行の場合はListboxに行位置を設定するコードです。

コードの詳細

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

動作確認

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

最後に

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

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

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

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

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

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