excel - Can you guys help me to make this code shorter? and smarter i guess
问题描述
Hi guys I'm a newbie on this so don't expect much from the code. Just tryna to make it shorter. Thanks! The code was made on the recorder macro function and I was cleaning it as much as I could. May be a smarter code for this but, basically is just to divide on 500 from the A column
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
代表最后使用的行 inColumn A
i
代表当前行
c
代表当前列
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
推荐阅读
- cookies - 如何更改 cookie-universal-nuxt 的同站点策略
- c# - 使用 C# 将大数据写入 MemoryStream
- python - TypeError: trace(): 参数“输入”(位置 1)必须是张量,而不是方法
- c# - 使用带有 Chrome 和 Edge 的实体框架的日历控制失败
- java - 通过构造函数访问数据以设置方法
- arrays - 查找在数组中列出了字符串的单元格,然后使用其他数组替换它
- python - 为什么我的程序在 3 次错误猜测后停止?
- javascript - 使用 Node.js / Express 刷新页面?
- operating-system - 现代操作系统是否使用 MCFG ACPI 表来查找 xHCI 的寄存器?
- java - Java方法算法修复