2017-04-23 47 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