【VBA】表示されているセル範囲だけを抽出して処理する方法|フィルターや非表示行を除外して操作

Excelでは、オートフィルターや手動での非表示処理などにより、一部のセルが表示されていない状態になることがあります。
そのような場合、見えているセルだけを対象に処理を行いたいというニーズは非常に多くあります。

VBAでは SpecialCells(xlCellTypeVisible) を活用することで、表示されているセルだけを抽出して操作することが可能です。


目次

コード例:表示されているセルのアドレスを取得する

Range("C2:G12").Select
MsgBox Selection.SpecialCells(xlCellTypeVisible).Address

コードの解説

1. Range("C2:G12").Select

  • 処理対象の範囲(例:C2からG12まで)を選択します。
  • この中には、行や列が非表示になっている場合も含まれます。

2. Selection.SpecialCells(xlCellTypeVisible)

  • 選択範囲内から、実際に表示されているセル(見えているセル)だけを抽出します。
  • AutoFilter で非表示になっている行や、手動で隠された行・列は除外されます。

3. .Address によるセル範囲の表示

  • 表示されたセルの範囲(アドレス)をメッセージボックスで確認できます。

使用例のイメージ

たとえば、以下のような範囲を対象としたとき:

  • C列〜G列のうち、E列が非表示
  • 2行目〜12行目のうち、5行目と7行目が非表示

この状態で上記コードを実行すると、非表示行・列を除いた表示セルのみのアドレスが表示されます。


応用:表示されているセルだけを太字にする

Dim visibleCells As Range
Set visibleCells = Selection.SpecialCells(xlCellTypeVisible)
visibleCells.Font.Bold = True
  • 抽出された表示セルだけに書式を適用できます。
  • セルの色変更、罫線の追加、値の更新などにも応用可能です。

注意点と補足

内容説明
非表示の行・列は対象外xlCellTypeVisible では完全に非表示のセルは無視されます
エラー処理を入れるべき場合表示されているセルが1つもない場合、エラーになることがあります
AutoFilter による絞り込みでも使用可能フィルターによって表示されたセルだけを対象に処理したい場合にも最適です

エラー対策コード例

On Error Resume Next
Dim visCells As Range
Set visCells = Selection.SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If visCells Is Nothing Then
    MsgBox "表示されているセルが見つかりませんでした"
Else
    visCells.Interior.Color = RGB(230, 255, 230)
End If

まとめ

処理内容使用構文特徴
表示セルだけを抽出SpecialCells(xlCellTypeVisible)非表示セルを除外して取得
書式を適用visibleCells.Font.Bold = True書式・色・数式なども適用可能
エラー対応On Error Resume Next表示セルが無い場合でも安全に処理

このように、SpecialCells(xlCellTypeVisible) を使うことで、ユーザーに表示されているセルだけに処理を限定することができます。
フィルター処理後のセル操作や、隠されたセルを無視した一括処理など、実務での応用性が非常に高い手法です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次