2017-04-23 1 views
-1

나는 완벽하게 기능하는 일부 코드가 있지만 매우 부 풀린 것처럼 보입니다. 이 코드를 어떻게 능률화 할 수 있습니까? 내가 말했듯이Excel 멋지게 코드가 필요합니다. 도움이 필요합니다.

Sub RowDiv1() 

Dim R1 As Range 
Dim R2 As Range 
Dim R3 As Range 
Dim R4 As Range 
Dim R5 As Range 
Dim R6 As Range 
Dim R7 As Range 
Dim R8 As Range 

    With Worksheets("Working Sheet 1") 
     Set R1 = .Range(.Range("G6000").End(xlUp), .Range("AH6000").End(xlUp)) 
     With R1 
      .Cells(1).Offset(1, -4).Resize(.Rows.Count, .Columns.Count) = .Value 
      .ClearContents 
     End With 

     Set R2 = .Range(.Range("G6000").End(xlUp), .Range("AD6000").End(xlUp)) 
     With R2 
      .Cells(1).Offset(1, -4).Resize(.Rows.Count, .Columns.Count) = .Value 
      .ClearContents 
     End With 

     Set R3 = .Range(.Range("G6000").End(xlUp), .Range("Z6000").End(xlUp)) 
     With R3 
      .Cells(1).Offset(1, -4).Resize(.Rows.Count, .Columns.Count) = .Value 
      .ClearContents 
     End With 

     Set R4 = .Range(.Range("G6000").End(xlUp), .Range("V6000").End(xlUp)) 
     With R4 
      .Cells(1).Offset(1, -4).Resize(.Rows.Count, .Columns.Count) = .Value 
      .ClearContents 
     End With 

     Set R5 = .Range(.Range("G6000").End(xlUp), .Range("R6000").End(xlUp)) 
     With R5 
      .Cells(1).Offset(1, -4).Resize(.Rows.Count, .Columns.Count) = .Value 
      .ClearContents 
     End With 

     Set R6 = .Range(.Range("G6000").End(xlUp), .Range("N6000").End(xlUp)) 
     With R6 
      .Cells(1).Offset(1, -4).Resize(.Rows.Count, .Columns.Count) = .Value 
      .ClearContents 
     End With 

     Set R7 = .Range(.Range("G6000").End(xlUp), .Range("J6000").End(xlUp)) 
     With R7 
      .Cells(1).Offset(1, -4).Resize(.Rows.Count, .Columns.Count) = .Value 
      .ClearContents 
     End With 

    End With 


End Sub 

,이 코드는 잘 작동하지만 그것은 단지 내가 달성하기 위해 노력하고 무엇을위한 매우 긴 것 같다.

+2

귀하의 코드가해야 할 일을 알려주십시오. 따라서 대체 방법으로 알려 드릴 수 있습니다. –

+5

** 작업 코드 **가 개선 될 것으로 생각되면 [codereview.se]를 참조하십시오. – jonrsharpe

+0

일부 포인터는 다음 링크에서 찾을 수 있습니다. http://www.excelitems.com/2010/12/optimize-vba-code-for-faster-macros.html –

답변

0

당신은 단 4 열 집합하여 마지막 행을 분할하는 경우이 수행해야 같은 :

Sub SplitRowBy4Cols() 
    Dim j As Long 
    With Worksheets("Sheet1").Range("G60000").End(xlUp).Resize(, 28) ' G:AH last row 
     For j = 1 To .Columns.Count Step 4 
      .Offset(1 + CLng(j/4), -4).Resize(, 4).Value = .Cells(1, j).Resize(, 4).Value 
     Next 
     .ClearContents 
    End With 
End Sub 
0
큰 우아함을 모두 당신이 필요로하는 많은 범위를 선언하지 않음으로써 달성 할 수

은 하나입니다 다른 모음집을 차례로 할당합니다.

코드의 나머지 부분은 코딩 작업보다 더 많은 퍼즐입니다. 작업이 코드로 생각을 표현할 때 그 생각을 알 수 있습니다. 퍼즐에서 당신은 개선을 원한다고 묘사 한 그 묘사로부터 생각을 결정하려고 노력합니다. 이 사이트는 코딩에 관한 것입니다. 우리는 퍼즐을하지 않습니다.

+0

나는 당신이 의미하는 바를 정말로 이해하지 못한다. 코딩의 모든 측면은 문제 해결과 관련이있다, 그렇지 않습니까? 하위가 매우 부피가 큰 더 긴 프로세스의 일부이기 때문에 나는 질문을 제기했다. 나는 그것을 최적화하려고 노력했다. 게다가, 나는 코딩을 개선하려고 노력하고 있었는데, 현재는 꽤 열악하다. 그래도 "도움"을 주셔서 감사합니다. – JKRH

관련 문제