Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 你们能帮我把代码缩短一点吗?我想是更聪明了_Excel_Vba - Fatal编程技术网

Excel 你们能帮我把代码缩短一点吗?我想是更聪明了

Excel 你们能帮我把代码缩短一点吗?我想是更聪明了,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

嗨,伙计们,我是这方面的新手,所以不要对代码期望太高。试着把它缩短一点。谢谢 代码是在recorder宏函数上生成的,我正在尽可能地清理它。这可能是一个更聪明的代码,但基本上只是从a列中除以500

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