2017-03-28 7 views
1

私はワークシートをループするコードを持っていますが、自分の条件に基づいた行だけでなくすべての行をコピーします。私が望む行だけをコピーするにはどうしたらいいですか?条件を基にコピーするために行をループする

Sub Major2_Paster() 

Dim LastRow As Integer 
Dim i As Integer 
Dim erow As Integer 

LastRow = Cells(Rows.count, 1).End(xlUp).Row 

For i = 2 To LastRow 
If Cells(i, 12) = “MLA” Then 
range(Cells(i, 1), Cells(i, 21)).Select 
Selection.Copy 

Workbooks.Open Filename:="H:\Degrees List\Sorted_Workbooks\MLA Mar-17.xlsx" 
erow = ActiveSheet.Cells(Rows.count, 1).End(xlUp).Offset(1, 0).Row 

ActiveSheet.Cells(erow, 1).Select 
ActiveSheet.Paste 
ActiveWorkbook.Save 
ActiveWorkbook.Close 
Application.CutCopyMode = False 

End If 

Next i 
End Sub 
+0

を見つけるの最初のステップは、コードの作業を行うのですか?はいの場合、この質問はhttp://codereview.stackexchange.com/に属しています。 –

+0

@ScottCraner私は完全にはわかりませんが、私はそれを実行したときに非常にゆっくりループしていたので、プログラムを停止しなければならなかったほどのコード行があります。小さいサイズで試してみましょう。 – Cocoberry2526

+0

@ScottCraner私はそれが実際に動作しないコードをテストしました。条件に基づいて行を検索するのではなく、私が探しているブックの行だけを検索して貼り付けます。 – Cocoberry2526

答えて

2

は物事のカップル:

  • のみブックを開くには、たら、これは
  • はむしろActiveSheet/ActiveWorkbook
  • を使用するよりもワークブック/ワークシートへの参照を作成します。最も重要なパフォーマンスの向上になります
  • インデントは、です。したがって、が重要です。これは、コードが以前よりもずっと読みやすくなりますし、それはあなた自身のエラー

Sub Major2_Paster() 
    Dim LastRow As Integer, i As Integer, erow As Integer 
    Dim destinationWorkbook As Workbook 
    Dim sourceWorksheet As Worksheet, destinationWorksheet As Worksheet 

    Set destinationWorkbook = Workbooks.Open(Filename:="H:\Degrees List\Sorted_Workbooks\MLA Mar-17.xlsx") 

    Set sourceWorksheet = ThisWorkbook.Worksheets("SheetName") 
    Set destinationWorksheet = destinationWorkbook.Worksheets("SheetName") 

    With sourceWorksheet 
     LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
    End With 

    For i = 2 To LastRow 
     If sourceWorksheet.Cells(i, 12).Value = “MLA” Then 
      With destinationWorksheet 
       erow = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
      End With 
      destinationWorksheet.Cells(erow, 1).Resize(1, 21).Value = sourceWorksheet.Range(sourceWorksheet.Cells(i, 1), sourceWorksheet.Cells(i, 21)).Value 
     End If 
    Next i 
    destinationWorkbook.Close SaveChanges:=True 

    Application.CutCopyMode = False 
End Sub 
+0

あなたのコードとアドバイスはとても役に立ちました!私の唯一の問題は、行がコピーされて他のブックに貼り付けられないということです。私はペーストを特別にする必要がありますか?私はそれが行をコピーしていないか貼り付けていないかどうかわからないので、基準が正しい列にあることを確認しました – Cocoberry2526

+0

あなたは確かに列12にいくつかの "MLA"を持っていますか? (列 'L') – CallumDA

+0

はい、私はわずか5行のサンプルファイル上のコードをテストしていますので、少し追加しました – Cocoberry2526

関連する問題