复制一列中的最后5个单元格,直到最后一行

时间:2019-05-22 11:42:54

标签: excel vba excel-formula

我有一个带有人名的基于文本的系统,我需要将前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

2 个答案:

答案 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