はじめに
Excelで作業をしていると、
「フィルタで絞り込んだ行だけコピーしたい」
「非表示の行や列を除いてコピーしたい」
そんな場面がよくあります。
VBAでは、SpecialCells を使うことで、
“見えているセルだけ” を安全にコピーできます。
ここでは、可視セルだけをコピーする基本のコードと、そのしくみを解説します。
まずはコードを確認
Range("A1:D100").SpecialCells(xlCellTypeVisible).Copy
もっともシンプルな書き方です。
A1:D100 のうち、表示されているセルだけ をコピーします。
コードのしくみを解説
SpecialCells(xlCellTypeVisible) とは
SpecialCells(xlCellTypeVisible) は、
「フィルタや非表示によって見えているセルだけ」を指します。
- フィルタで絞り込んだ行
- 非表示にした行・列を除いたセル
- グループ化で折りたたまれた部分も除外
実務でとても頼れるプロパティです。
具体的な例で理解する
フィルタ後の可視セルだけコピーする
Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
- CurrentRegion は、見出しを含む表全体を自動で取得
- フィルタ後の可視セルだけコピーされる
コピー先を指定する
Range("A1:D100").SpecialCells(xlCellTypeVisible).Copy Destination:=Range("G1")
貼り付け先を明示すると、コードが読みやすくなります。
行や列を非表示にしてからコピーする
Rows(3).Hidden = True
Range("A1:D10").SpecialCells(xlCellTypeVisible).Copy
非表示行はコピーされません。
可視セルだけをコピーするときの注意点
可視セルが1つもないとエラーになる
On Error Resume Next
Range("A1:D100").SpecialCells(xlCellTypeVisible).Copy
On Error GoTo 0
フィルタ結果が0件の場合に備えておくと安全です。
結合セルがあるとコピー範囲がずれることがある
→ 可能なら結合を避けるか、事前に解除します。
フィルタ中のコピーは貼り付け先の形が変わることがある
→ 行数が変わるため、貼り付け先のレイアウトに注意。
応用:可視セルだけを別シートにコピーする
Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Destination:=Worksheets("抽出結果").Range("A1")
抽出結果を別シートにまとめる実務でよく使うパターンです。
応用:可視セルだけを値貼り付けする
With Range("A1:D100").SpecialCells(xlCellTypeVisible)
.Copy
.PasteSpecial xlPasteValues
End With
計算結果だけを残したいときに便利です。
まとめ
- SpecialCells(xlCellTypeVisible) で可視セルだけをコピーできる
- フィルタ後・非表示行/列を除いたコピーに最適
- 貼り付け先を指定するとコードが読みやすくなる
- 可視セルがない場合のエラー処理も実務では大切
可視セルだけを扱えるようになると、
フィルタを使ったデータ整理がぐっとスムーズになります。

可視セルだけをコピーする処理は、
「必要な情報だけを丁寧に扱う」ための小さな工夫です。
VBAに任せることで、作業が静かに、でも確実に軽くなります。

見えているところだけ、そっとコピーするよ。
VBAは、そんな気配りも得意なんだね。

コメント