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) を使うことで、ユーザーに表示されているセルだけに処理を限定することができます。
フィルター処理後のセル操作や、隠されたセルを無視した一括処理など、実務での応用性が非常に高い手法です。
技術書の購入コストを抑えてスキルアップするなら

ここまで読んでいただきありがとうございます。最後に宣伝をさせてください。
プログラミングの技術書や参考書は、1冊3,000円〜5,000円するものも多く、出費がかさみがちです。Kindle Unlimitedであれば、月額980円で500万冊以上の書籍が読み放題となります。
気になる言語の入門書から、アルゴリズム、基本設計の専門書まで、手元のスマホやPCですぐに参照可能です。現在は「30日間の無料体験」や、対象者限定の「3か月499円プラン」なども実施されています。まずはご自身のアカウントでどのようなオファーが表示されるか確認してみてください。
