Excel VBA 特定の値が入った行のみ非表示にする



特定の値が入った行のみ非表示にする

エクセルのVBAにおいて、
特定の値が入った行のみ非表示にする場合は、For Nextステートメントを使ってループ処理をするやり方があります。



行を非表示にする背景

本来、エクセルにおいて特定の値が入った行のみ非表示にしたい場合は表のフィルター機能を使うのが簡単です。

しかしながら、値のあるセルが連続していない場合は表を作れず、フィルター機能は使うことができません。

このように状況によってはVBAで処理を行いたい場合があると思います。

考え方としては、
指定したセルの範囲において、特定の値が入っているかを自動で1つずつ検証してくれるような構文を書きます。

こういった作業には「For Next」が便利です。

そして特定の値が入っていたら処理をするという条件分岐を作ります。
つまり「IF」ですね。



実際のコード

例えば、

  A B C
1 ○
2 ×
3 ○
4 ×
5 ×

といった表があって、○の行、つまり1行目と3行目を非表示にしたい場合は、

 Dim i As Integer
    
    For i = 1 To 5  '何行目から何行目まで処理をするか
    If Cells(i, 1) = "○" Then  'ここに条件を入れる
        Rows(i).Hidden = True
    End If
    
    Next i

といったようなコードにします。



おわりに

今回の書き方の場合、範囲を指定してその範囲内をエクセルが検証してくれるかたちをとっています。

そのため範囲が広ければ広いほど処理に時間はかかってくると思いますので、必要十分な範囲指定が必要になってきます。

また、繰り返しになりますが特定の行を非表示にしたい場合はフィルターオプションが簡単です。

そのためまずは表を作るようなレイアウトを検討し、それが難しい場合にVBAを使うというパターンがいいかと。

どんな機能も使いどころが大切で、そこを選択ミスすると余計にややこしいことになるので。

テキストのコピーはできません。