質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

3570閲覧

VBA:Excelフィルターをかけて1つずつコピーして別シートに1つずつペーストしたい

SatokoH

総合スコア9

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/08/15 06:05

VBAでオートフィルターをかけて1つずつコピーして別シートにペーストして、1つずつファイルを保存したいのですが、下記の箇所で止まりました。
b.Range("A10").CurrentRegion.Offset(1, 0).Resize(Rows.Count - 1).Copy
どのように修正したら良いかご教示ください。どうぞよろしくお願いいたします。

   

「入力シート」 のA列の部名称毎にフィルターにかけて、N列までコピーしたうえで、「部別シート」にペーストして、部別にファイルを作成する。
部名称をU列にコピーして重複削除を行なったうえで、それをキーにしてフィルターをかけました。

「入力シート」イメージ
イメージ説明
「部別」シートイメージ
イメージ説明

Sub 部別ファイル作成() Dim i As Integer Dim b As Worksheet With ThisWorkbook Set b = .Worksheets("入力シート") End With b.Range(Range("A11"), Cells(Rows.Count, 1).End(xlUp)).Copy b.Range("U2").PasteSpecial Paste:=xlPasteValues b.Range("U:U").RemoveDuplicates 1, xlYes For i = 2 To b.Cells(Rows.Count, 21).End(xlUp).Row b.Range("A10").AutoFilter 1, b.Cells(i, 21) Sheets("部別").Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = b.Range("V" & i).Value Sheets(Sheets.Count).Range("G1").Value = b.Range("V" & i) b.Range("A10").CurrentRegion.Offset(1, 0).Resize(Rows.Count - 1).Copy Sheets(Sheets.Count).Range("A11").PasteSpecial Paste:=xlPasteValues Sheets(Sheets.Count).Copy Application.DisplayAlerts = False ActiveWorkbook.SaveAs "依頼書_" & ActiveSheet.Name & Format(Date, "yymmdd") & ".xlsx" ActiveWorkbook.Close Sheets(Sheets.Count).Delete Sheets("入力シート").Select Next End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これでどうでしょうか。

VBA

1With b.Range("A10").CurrentRegion.SpecialCells(xlCellTypeVisible) 2 .Offset(1, 0).Resize(.Rows.Count - 1).Copy 3End With

投稿2021/08/15 07:28

jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SatokoH

2021/08/15 08:40

いつもありがとうございます。 いつも わかりやすい構文で大変勉強になります。 今回、教えていただきました構文に差し替えたのですが、 繰り返すなかで 1つ目の部名称では項目ごとペーストされ、 2つ目の部名称では .Offset(1, 0).Resize(.Rows.Count - 1).Copy のところでエラーで止まってしまいました。 差し替えるのみではダメでしょうか。
jinoji

2021/08/15 08:50

.Offset(2, 0).Resize(.Rows.Count - 2).Copy とするとよいかもしれません。 このレイアウトだと9行目もCurrentRegionに含まれるはずなので。
SatokoH

2021/08/15 10:24

ありがとうございます。 2に変更しましたら解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問