6/12/2017

Excel。マクロ008。可視セルだけを別シートにコピーする【xlCellTypeVisible】

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ですね。

【可視セルを別シートにコピー】を紹介しましたが、
可視セルに限らず、
別シートにコピーするということはスタンダードな処理なので、
機会がありましたら、
是非【別シートにコピー】のマクロを作ってみてはいかがでしょうか?