2017-08-02 8 views
0

レポートから複数のワークシートにデータをコピーするマクロを作成中です。マクロは正常に動作しますが、私は小さなことで苦労しています。私はB9:Jの範囲だけでなくN8:Nもコピーしたいと思いますが、("B9:J" & "N9:N" & Lastrow)をコピーすると、マクロはB列からN列にすべてコピーされますが、K、L、M列はスキップします。Range("B2", "N2")Range("B2" & "N2")Copy tgt.Range("B2").End(xlDown).Offset(1)にありますが、動作しません。Excelでオートフィルタを使用して複数の範囲をコピーアンドペーストする

Sub report_template() 

Const fromFile = "c:\Users\" & Environ("username") & "\Desktop\Report.xls" 
Dim srcBook As Workbook 
Set srcBook = Application.Workbooks.Open(fromFile, _ 
UpdateLinks:=False) 
Application.ScreenUpdating = False 
srcBook.Sheets("Report Page").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 
ActiveSheet.Name = "report" 
srcBook.Close False 

Dim src As Worksheet 
Dim tgt As Worksheet 
Dim filterRange As Range 
Dim filterRange2 As Range 
Dim filterRange3 As Range 
Dim filterRange4 As Range 
Dim copyRange As Range 
Dim Lastrow As Long 
Dim tgt2 As Worksheet 
Set src = ThisWorkbook.Sheets("report") 
Set tgt = ThisWorkbook.Sheets("1") 
Set tgt2 = ThisWorkbook.Sheets("2") 
Set tgt3 = ThisWorkbook.Sheets("3") 
Set tgt4 = ThisWorkbook.Sheets("4") 

src.AutoFilterMode = False 
Lastrow = src.Range("B" & src.rows.Count).End(xlUp).Row 
Set filterRange = src.Range("A8:J" & Lastrow) 
Set copyRange = src.Range("B9:J" & Lastrow) 
filterRange.AutoFilter Field:=1, Criteria1:="EN > 1" 
copyRange.SpecialCells(xlCellTypeVisible).Copy tgt.Range("B2").End(xlDown).Offset(1) 
Set filterRange2 = src.Range("A8:J" & Lastrow) 
filterRange2.AutoFilter Field:=1, Criteria1:="EN > 2" 
copyRange.SpecialCells(xlCellTypeVisible).Copy tgt2.Range("B2").End(xlDown).Offset(1) 
Set filterRange3 = src.Range("A8:J" & Lastrow) 
filterRange3.AutoFilter Field:=1, Criteria1:="EN > 3" 
copyRange.SpecialCells(xlCellTypeVisible).Copy tgt3.Range("B2").End(xlDown).Offset(1) 
Set filterRange4 = src.Range("A8:J" & Lastrow) 
filterRange4.AutoFilter Field:=1, Criteria1:="EN > 4" 
copyRange.SpecialCells(xlCellTypeVisible).Copy tgt4.Range("B2").End(xlDown).Offset(1) 
Application.DisplayAlerts = False 
Worksheets("report").Delete 
Application.DisplayAlerts = True 


Application.ScreenUpdating = False 

End Sub 

答えて

0

これは、マルチエリア範囲を作成します:

Range("B9:J" & Lastrow & "," & "N9:N" & Lastrow) 
+0

は答えをいただき、ありがとうございます。マクロは正しい列をコピーしますが、列Nのデータは列Nにコピーされるのではなく、列Kにコピーされます。私は次の行で同じメソッドを実行しましたが、 'Range(" B2 "&"、 "&" N2 "'。 – Adrian

+0

あなたの選択範囲の間に空白領域を残したい場合は、 K、L、M列のデータがありますか?そうでない場合、最も簡単な方法は全範囲(BからNまで)をコピーしてKからMにクリアすることです – avb

+0

列K、L aqnd Mには、私はこれらの列に「触れない」ことを望んでいません。次に、それぞれの範囲を別々にコピーします。 – Adrian

関連する問題