Excel VBA オートフィルタ抽出箇所のみにペースト

スポンサーリンク

excel_vba

excelの作業中、オートフィルタはデータ分析業務において重要な機能です。すごく使いやすいのですが、1点だけすごくイラつくところがあります。それは、フィルタで抽出した箇所のみコピー(Alt +; → ctrl + c)はできるのですが、そのコピーしたデータを他の列にコピーしようとしても表示されている場所のみにペーストができないのです。その、不満を解消するためにvbaで簡単なコードを作成しました。上記解説だけでは不満箇所がわかりにくいかもしれないので、使い方も含め説明します。

コード

Public Sub myvisible()

Application.ScreenUpdating = False
Dim Str As String, tmp As Variant

'クリップボードを操作する為のDataObjectオブジェクトを用意する。
Dim CLPB As New DataObject

'DataObjectオブジェクトにクリップボードのデータを設定する。
CLPB.GetFromClipboard

'クリップボード内のテキストを取得する。
Str = CLPB.GetText
tmp = Split(Str, vbCrLf)

'iにはクリップボードテキスト、myrngには選択範囲の可視セルのみ、rngはiとmyrngの紐づけとして利用
Dim i As Integer
Dim myrng As Range, rng As Range

'myrngに選択セルの可視セルのみ代入
Set myrng = Selection.SpecialCells(xlCellTypeVisible)

'iは0(ペーストセル1行目)、1(ペーストセル2行目)、~に対応
i = 0
For Each rng In myrng
rng = tmp(i)
i = i + 1
Next

End Sub

マクロを動かす前に

クリップボードを操作するDataObjectを使うためには、Microsoft Forms 2.0 Object Libraryを参照しなければエラーになってしまいます。以下の手順で設定しておきましょう。

開発 → VBE起動 → ツール → 参照設定 → Microsoft Forms 2.0 Object Libraryにチェックをいれる

参照設定説明画像
参照設定説明画像
参照設定説明画像

使い方

商品名列のいちご、キャベツ、たまねぎ、にんじん、ピーマンのなかからいちごのみ抽出

オートフィルタ抽出箇所のみにペースト説明画像1

本来であれば、抽出箇所のみコピーを使い他の行に単純にペーストしても、表示されている箇所のみにペーストは不可能

オートフィルタ抽出箇所のみにペースト説明画像2

そこで、抽出箇所のみコピー後、貼り付けたい箇所を全て選択し、上記コードをvbeで動かす。すると、下記のように表示されている箇所のみにペーストが可能になる

オートフィルタ抽出箇所のみにペースト説明画像2

アドインダウンロード

アドインを作成しました。是非利用して見て下さい。(アドインの登録方法は以下を参照)

Excel vba の便利なツールをアドインに登録



コメント

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