2017-03-29 1 views
0

코드 아래에서 실행 중입니다. "fast"라는 워크 시트에는 cycle, run, walk, jog 등의 이름이 포함되어 있습니다. 코드는 현재 특정 행에서 "cycle"이라는 단어를 검색하고 발견 된 경우 전체 열을 복사 한 후 " 주기". 지금은 스크립트를 반복하고 "실행" "걷기"와 같은 이름에 대해 "주기"를 변경합니다. 단순히 동일한 스크립트를 반복해서 반복하지 않음으로써 더 짧고 효율적으로 만들 수 있습니까?다른 워크 시트 이름을 가진 루프 코드

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

하나의 하드 코딩 된 "주기"를 남겨 두는 이유가 있습니까? @Copy Destination : = Sheets ("Cycle"). 컬럼 (col)' –

+0

@ Jean-FrançoisCorbett가 수정하는 것을 잊어 버렸습니다. 실제로 필요한지 확실하지 않습니다. 다시'PasteSpecial'을 수행하고 있기 때문입니다. 나중에, PO 피드백을 기다리고 –

+0

안녕 모두 응답 주셔서 감사합니다. 복사 - 붙여 넣기 두 번은 내가 정돈하는 것을 잊어 버린 코드에서 남겨졌다. 새로운 워크 시트 내의 열을 붙여 넣는 위치를 제외하고 코드는 A1부터 이후의 임의의 열에 있습니다. – Dave

관련 문제