Excel。マクロ008。可視セルだけを別シートにコピーする
<VBA>
事務職でも、少しExcel VBAを知っていると、確かに作業効率は改善されるようですが、
難しいと感じている人も多いようです。
とはいえ、少しずつでいいので、慣れていくといいですね。
ということで、
今回は、
【可視セルだけを別シートにコピーする】
というケースをご紹介していきます。可視セルだけを別シートにコピーするという作業は、
発生する頻度が高い処理ですよね。
そこで、この作業を効率化したいというわけですね。
まず、次の表があります。
2行目から10行目のデータが非表示になっている表です。
この可視セルを、『貼り付け』というシートにコピーしたいとします。
データの大きさが異なることが予想されますので、
範囲指定をすると効率が悪化しますので、
Range("a1").CurrentRegion.SpecialCells(xlCellTypeVisible).Select
という構文を使ってあげるといいですね。
お馴染みの、CurrentRegion は、A1から連続してあるセル範囲。
すなわち表ということですね。
そして、引数が、xlCellTypeVisible としております。
このxlCellTypeVisibleは、Visible。
すなわち、『可視セル』を意味します。
なので、
「この文書で、A1からの表の可視セルを選択」
という意味になります。
では、次のようにVBAを作ってみました。
Sub 可視セル選択01()
Range("a1").CurrentRegion.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Worksheets("貼り付け").Select
Range("a1").Select
ActiveSheet.Paste
End Sub
範囲選択して、コピーして、貼り付けシートを選択して、
そのA1を選択して、貼り付け
という作業をしている構文。
これで、問題はなく、
貼り付けシートにコピーして貼り付けを行うことが出来るのですが、
マクロの記録で作ったような構文で、
Selectがアチコチにあって、逆にわかりにくい印象になっています。
そこで、構文を作っていくときに、COPYメソッドを入力すると、
COPY([Destination])とヒントが表示されてきます。
このように、何かプラスアルファが出来る場合には、
効率的に出来るヒントが潜んでいることがあります。
このDestinationは、
『コピー先のセル範囲を指定』することができる引数なのです。
つまり、このDestinationを使えば、わざわざ、
「シートを選択」する行を作らなくても、まとめて、構文を作れるわけです。
ということで、Destinationを使って、作り直してみましょう。
Sub 可視セル選択02()
Range("a1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Destination _
:=Worksheets("貼り付け").Range("a1")
End Sub
このように、たった一行だけのマクロで、
別シートに可視セルのデータをコピーすることが出来るのです。
こちらのほうが、わかりやすいですし、見やすいしので、
修正が合ったりした場合の変更もしやすいですよね。
さらに、Destinationは、省略することができますので、
Range("a1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Worksheets("貼り付け").Range("a1")
としてもOKですね。
【可視セルを別シートにコピー】を紹介しましたが、
可視セルに限らず、
別シートにコピーするということはスタンダードな処理なので、
機会がありましたら、
是非【別シートにコピー】のマクロを作ってみてはいかがでしょうか?