我有一个带有人名的基于文本的系统,我需要将前4个单元格(不是问题)和后5个单元格复制并粘贴到另一个工作表中进行分析。
当涉及姓氏空格的人(即Da Silva)时,出现问题的原因是将数据从基于文本的系统呈现到电子表格。我在栏上使用文字,这会给我一个变体编号栏,具体取决于名称中空格的数量。
我已经有了一个粗略的解决方案,但是在宏运行时花费的时间以及在屏幕之间跳转似乎很不专业。我没有太多的工作时间,也没有工具在家中进行适当的测试。
谁能帮我让它循环直到最后一个空单元格,并基本上将其整齐一点?
重复300次的代码如下:
Sheets("Late list Sorting").Select
Range("A2").End(xlToRight).Select
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, -5)).Select
Selection.Copy
Sheets("Late list").Select
Range("D4").Select
ActiveSheet.Paste
(...Repeat until...)
Range("A300").End(xlToRight).Select
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, -5)).Select
Selection.Copy
Sheets("Late list").Select
Range("D302").Select
ActiveSheet.Paste
Sheets("Late list Sorting").Select
答案 0 :(得分:0)
使用效率低下。选择,这里有很多资源:How to avoid using Select in Excel VBA
要消除屏幕闪烁,请将其放在代码的开头。记住最后要把它变回真实。
Application.ScreenUpdating = False
您想使用一个循环,其中变量i成为您将引用的行号,如下所示:
Range("A" & i).Value...
循环的方法很多,下面是一个例子:
For i = 1 to 300
//All your code here
Next i
答案 1 :(得分:0)
如果您只想要值(而不是公式或格式),则只需使用Value = Value ...
Dim i As Long, sWs As Excel.Worksheet, tWs As Excel.Worksheet
Set sWs = ThisWorkbook.Worksheets("Late list Sorting")
Set tWs = ThisWorkbook.Worksheets("Late list")
For i = 2 To 300
tWs.Range(tWs.Cells(i + 2, 4), tWs.Cells(i + 2, 8)).Value = sWs.Range(sWs.Cells(i, 1).End(xlToRight), sWs.Cells(i, 1).End(xlToRight).Offset(0, -5)).Value
Next