2017-03-29 12 views
0

以下のコードを実行しています。 「高速」という名前のワークシートには、サイクル、実行、ウォーク、ジョグなどの名前が含まれています。コードは現在、特定の行の単語「サイクル」を検索し、見つかった場合は列全体をコピーし、サイクル"。現時点では、スクリプトを繰り返して「実行」「散歩」などの名前を「サイクル」に変更しています。同じスクリプトを何度も繰り返して繰り返すだけではなく、これを短く効率的にすることができます。異なるワークシート名のループコード

Sub Cycle() 

Dim C As Range 
Dim col As Long, lastCol As Long 

With Worksheets("fast") 
    lastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column 
    col = 1 
    For Each C In .Range(.Cells(2, 1), .Cells(2, lastCol)) 
     If C.value = "Cycle" Then 
      C.EntireColumn.Copy Destination:=Sheets("Cycle").Columns(col) 
      C.EntireColumn.Copy 
      Sheets("Cycle").Columns(col).PasteSpecial xlPasteValues 
      col = col + 1 
     End If 
    Next C 
End With 
Worksheets("Cycle").Activate 

End Sub 
+0

あなたは二回、コピー&ペーストのはなぜ? –

答えて

0

それはあなたが何を意味するかだなら、私に知らせて、以下のコードを試してみてください。

Option Explicit 

Sub Cycle() 

Dim C    As Range 
Dim StringsArr  As Variant 
Dim col As Long, lastCol As Long 

StringsArr = Array("cycle", "run", "walk", "jog") 

With Worksheets("fast") 
    lastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column 
    For Each C In .Range(.Cells(2, 1), .Cells(2, lastCol)) 
     ' check per cell if value is one of the values in StringsArr array 
     If Not IsError(Application.Match(C.value, StringsArr, 0)) Then 
      col = Sheets(C.value).Cells(2, Sheets(C.value).Columns.Count).End(xlToLeft).Column + 1 ' find first empty column in relevant sheet 
      C.EntireColumn.Copy 
      Sheets(C.value).Columns(col).PasteSpecial xlPasteValues 
     End If 
    Next C 
End With 

End Sub 
+1

ハードコーディングされた「サイクル」を1つ残した理由はありますか? @EndireColumn.Copy Destination:= Sheets( "Cycle")。列(col) ' –

+0

@ Jean-FrançoisCorbettはそれを修正するのを忘れてしまった、本当に必要なのか分からない、再度' PasteSpecial'を行っている後で、POのフィードバックを待って –

+0

こんにちは、両方の応答に感謝します。コピーペーストは、私が整頓するのを忘れたコードから2回残っていました。コードは、新しいワークシート内の列を貼り付ける場所を除いて、A1からではなくランダムな列になります。 – Dave

関連する問題