Excel 你们能帮我把代码缩短一点吗?我想是更聪明了
嗨,伙计们,我是这方面的新手,所以不要对代码期望太高。试着把它缩短一点。谢谢 代码是在recorder宏函数上生成的,我正在尽可能地清理它。这可能是一个更聪明的代码,但基本上只是从a列中除以500Excel 你们能帮我把代码缩短一点吗?我想是更聪明了,excel,vba,Excel,Vba,嗨,伙计们,我是这方面的新手,所以不要对代码期望太高。试着把它缩短一点。谢谢 代码是在recorder宏函数上生成的,我正在尽可能地清理它。这可能是一个更聪明的代码,但基本上只是从a列中除以500 Columns("A:A").Select Application.CutCopyMode = False ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo Range("A501:A1000").Cu
Columns("A:A").Select
Application.CutCopyMode = False
ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
Range("A501:A1000").Cut
Range("B:B").Select
ActiveSheet.Paste
Range("A1001:A1500").Cut
Range("C:C").Select
ActiveSheet.Paste
Range("A1501:A2000").Cut
Range("D:D").Select
ActiveSheet.Paste
Range("A2001:A2500").Cut
Range("E:E").Select
ActiveSheet.Paste
Range("A2501:A3000").Cut
Range("F:F").Select
ActiveSheet.Paste
Range("A3001:A3500").Cut
Range("G:G").Select
ActiveSheet.Paste
Range("A3501:A4000").Cut
Range("H:H").Select
ActiveSheet.Paste
Range("A4001:A4500").Cut
Range("I:I").Select
ActiveSheet.Paste
Range("A4501:A5000").Cut
Range("J:J").Select
ActiveSheet.Paste
End Sub```
每当您发现自己在重复代码时,都可能会错过一个循环的机会
lr
表示列A中最后使用的行
i
表示当前行c
表示当前列
Sub-Shorter\u Better\u Faster()
将ws设置为工作表:设置ws=ThisWorkbook.Sheets(“Sheet1”)“您可以在循环中执行此操作,并使其非常简短。这是否回答了您的问题?请随意参考;正确地提出正确的问题肯定会引起更多的反应。如果你在代码中至少包含一个简短的解释,这通常会更有帮助。我试图运行代码,但它什么也不做,知道发生了什么吗?工作表名称是相同的“Sheet1”,因此不需要更新,基本上我正在做的是在a列上获得3000个左右的值,我打算做的是删除重复项,然后将3000分为500(A必须数500,B必须数500,C必须数500)。抱歉,如果我不够清楚@urdearboy,我再次尝试使用您更新的代码,但仍然只是运行,什么也不做。你有什么办法可以帮我吗?或者我可以像文件副本一样寄给你,这样你就可以验证它了?没问题,我不理解。所以你可以把A列上的X数量的值除以500来表示B C D E?比如,如果你有1234..1000,你会有A上的1-500和B上的501-1000?我可能已经发现了错误,当我将“Sheet1”更改为“Test”并更新代码时,出现了调试错误(下标超出范围),我知道这不应该发生。有什么想法吗?
Sub Shorter_Better_Faster()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- UPDATE
Dim lr as Long, i As Long, c As Long
lr = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
c = 2
For i = 501 To lr Step 500
ws.Range(ws.Cells(1, c), ws.Cells(500, c)).Value = ws.Range(ws.Cells(i, 1), ws.Cells(i + 500, 1)).Value
c = c + 1
Next i
ws.Range("A501:A" & lr).ClearContents
End Sub