
オートフィルタ結果をコピーして、別シートに貼り付けるというマクロとなります。
しかし、これですと絞り込んだ対象の中に空白の行があると、空白行の上までの部分しかコピーをすることができません。
そこで、登録のシートの空白行は削除することなく、
抽出のシートで空白行を削除して貼り付けをしたいのですが、
こうしたことは可能でしょうか。
もし可能でしたら、どのようなコードを追記すればよろしいでしょうか。
よろしくお願い致します。
>
Sub ()
Const SHEET_COPY As String = "登録"
Const SHEET_PASTE As String = "抽出"
Worksheets(SHEET_COPY).Range("a2:e" & _
Worksheets(SHEET_COPY).Range("a1").CurrentRegion.Rows.Count).Copy
Worksheets(SHEET_PASTE).Range("a" & _
Worksheets(SHEET_PASTE).Range("a1").CurrentRegion.Rows.Count + 1).PasteSpecial Paste:=xlPasteValues
Sheets("抽出").Select
End Sub
No.3ベストアンサー
- 回答日時:
図を入れることを忘れたのと修正部分があります。
たぶん、このようなマクロでも、おそらくは満足はされないとは思いますが、参考ぐらいにはなるはずです。
修正部分:一箇所:横に一つずれる
OpRng.CurrentRegion.ClearContents '貼り付け先のデータの削除
If Sh1.AutoFilterMode = False Then Exit Sub
Set Rng = Sh1.AutoFilter.Range
j = 2
Rng.Rows(1).Offset(, 1).Copy OpRng.Cells(1) '※修正
For rw = 2 To Rng.Rows.Count
If WorksheetFunction.Subtotal(3, Sh1.Cells(rw, 2)) > 0 Then
OpRng.Cells(j, 1).Resize(, Rng.Columns.Count).Value = _
Sh1.Cells(rw, 2).Resize(, Rng.Columns.Count).Value
j = j + 1
End If
Next rw
End Sub

No.4
- 回答日時:
>AutoFilter で間が空くような現象
フィルターの条件を複数指定して、条件の1つに(空白セル)を入れるとか?
(=特定のコード1つのみ除外して残りのデータは全て残したい場合など)
>Range("a1").CurrentRegion.Rows.Count + 1).PasteSpecial Paste:=xlPasteValues
わざわざこう書く場合は、貼り付け先に既にデータがあるという事ではないのでしょうか。
つまり、元々のコードは過去データに追記していくような仕様で設計されているとか?
※提示されたコードを2回実行すれば動きが確認できると思います。
その場合、空白を含んではいけない仕様になります。
[予想]
どこかからコード流用。そのコードは過去データに追記する仕様(空白セルを含んではいけない前提)
↓
質問者が元コードの仕様を理解せず、自分の都合で空白セルを含む仕様を追加して質問。
ありがとうございました。
お礼が遅れましたこと、お詫びします。
コードの表記までありがとうございます。
参考にさせていただきます。
No.2
- 回答日時:
このご質問を注意深く読んでみましたが、再現性が今ひとつ取れません。
何か、一つの条件が抜けているようです。>これですと絞り込んだ対象の中に空白の行があると、空白行の上までの部分しかコピーをすることができません。
これ自体は、CurrentRegion が原因だとしても、AutoFilter で間が空くような現象が、あるとは思えないのです。(図1)
どのようなデータの並びになっているのか教えていただきたいです。
Range("a1").CurrentRegion.Rows.Count + 1).PasteSpecial Paste:=xlPasteValues
これも意味不明です。
いずれにしても、SpecialCells やPastSpecial メソッドで可能になるかどうかは、内容が単純でないので、簡単ではありません。本来ファイルターで工夫したほうが早いような気がします。
'//
Sub TestFilterCopyw_oBlank()
Const SHEET_COPY As String = "Sheet2" '"登録"
Const SHEET_PASTE As String = "Sheet3" '"抽出"
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim Rng As Range
Dim rw As Long, j As Long
Dim OpRng As Range
'**************設定*****
Set Sh1 = Worksheets(SHEET_COPY)
Set Sh2 = Worksheets(SHEET_PASTE)
Set OpRng = Sh2.Range("A1") '貼り付け先/タイトル行を想定しているので2行目から
'******************
OpRng.CurrentRegion.ClearContents '貼り付け先のデータの削除
If Sh1.AutoFilterMode = False Then Exit Sub
Set Rng = Sh1.AutoFilter.Range
j = 2
Rng.Rows(1).Copy OpRng.Cells(1) 'タイトル行のコピー
For rw = 2 To Rng.Rows.Count
If WorksheetFunction.Subtotal(3, Sh1.Cells(rw, 2)) > 0 Then
OpRng.Cells(j, 1).Resize(, Rng.Columns.Count).Value = _
Sh1.Cells(rw, 2).Resize(, Rng.Columns.Count).Value
j = j + 1
End If
Next rw
End Sub
'//
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAで指定した行数の...
-
EXCEL VBAでA列にある空白行よ...
-
VB.net
-
vbaエクセルマクロについて she...
-
マクロで最終行を取得してコピ...
-
VBAについて困っています
-
VBAで入力の結果を他のセルに反...
-
【至急】Excel 同一人物の情報...
-
VBAで保存しないで閉じると空の...
-
【マクロ】元データと同じお客...
-
WPSOffice_マクロの有効化について
-
エクセル関数>参照ファイル名...
-
Excel マクロの編集がグレーに...
-
エクセルで、「いいね」のよう...
-
複数のマクロボタンをまとめて...
-
Excelのマクロでボタンを押すと...
-
エクセル ボタンに設定したマク...
-
【Excel VBA】マクロでExcel自...
-
エクセルの、記録を終了したマ...
-
マクロの保存先、開いてるすべ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数値に見えるものはすべて数値...
-
マクロで最終行を取得してコピ...
-
VB.net
-
列から特定の文字列検索→該当以...
-
Excel VBAでオートフィルタで抽...
-
【VBA】条件に一致しない行を削...
-
エクセルのデータがない行には...
-
【マクロ】A列最終行までを、カ...
-
Excel97 指定した行だけマク...
-
エクセルのVBAで指定した行数の...
-
各個体に対する平均値の自動計...
-
Excel マクロ 検索結果を別シ...
-
EXCEL VBAでA列にある空白行よ...
-
オートフィルターの複数条件検...
-
エクセルで階層図を作る方法
-
エクセルで空白行を削除する ...
-
【VBA】条件に一致しない行を削...
-
VBAで入力の結果を他のセルに反...
-
マクロで教えてください。
-
Access2003レポート:最終ペー...
おすすめ情報