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にチェックをいれる
使い方
商品名列のいちご、キャベツ、たまねぎ、にんじん、ピーマンのなかからいちごのみ抽出
本来であれば、抽出箇所のみコピーを使い他の行に単純にペーストしても、表示されている箇所のみにペーストは不可能
そこで、抽出箇所のみコピー後、貼り付けたい箇所を全て選択し、上記コードをvbeで動かす。すると、下記のように表示されている箇所のみにペーストが可能になる
アドインダウンロード
アドインを作成しました。是非利用して見て下さい。(アドインの登録方法は以下を参照)
コメント