【Excel VBA】可視セルだけをコピーする基本コードとやさしい解説

VBA & Excel
スポンサーリンク
スポンサーリンク

はじめに

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) で可視セルだけをコピーできる
  • フィルタ後・非表示行/列を除いたコピーに最適
  • 貼り付け先を指定するとコードが読みやすくなる
  • 可視セルがない場合のエラー処理も実務では大切

可視セルだけを扱えるようになると、
フィルタを使ったデータ整理がぐっとスムーズになります。


decopon
decopon

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

moco
moco

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

コメント

タイトルとURLをコピーしました