2017-04-23 44 views
-1

我有一些功能完善的代碼,但對我來說似乎很臃腫。我如何簡化這些代碼?Excel Inelegant代碼,有助於優化

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

我真的不明白你的意思,編碼的各個方面都與解決問題有關,不是嗎? 我提出了這個問題,因爲sub是一個體積較大的較長進程的一部分。我試圖優化它。此外,我試圖改進我現在很差的編碼。不過謝謝你的「幫助」。 – JKRH