我正在尝试将每日报告合并到一个主文档中。以前,我使用Excel函数来执行此操作。但是文件大小变得巨大。所以我想,我可能会使用VBA消除工作表上的大量功能,并减少文件大小和计算时间。
基本上,我在Sheet1(主文档)上有主行号作为数据库。从Sheet2中,我需要每天为Sheet1上列出的行号完成工作量。
例如,在Sheet1中,单元格“ M3”代表第一行号(Line-01)。在“ X3”单元格中,将存在来自Sheet2范围“ O:O”的工作量(10个关节)。 这将根据日常效果在随机时间重复。因此,我将获得从“ O3”到“ O1000”范围的数据(甚至更多)。
Sub DailyProgress()
Dim i As Long
Sheets(1).Activate
Range("X3:X" & Range("M" & Rows.Count).End(xlUp).row).Formula = _
"=IFERROR(vlookup(M3,Sheet2!D:O,12,0),Text(,))"
i = 3
'Because my first cell is on row 3
Do Until IsEmpty(Cells(i, 12))
Cells(i, 24).Copy
Cells(i, 24).PasteSpecial xlPasteValues
i = i + 1
Loop
End Sub
我编写了使vlookup,将其复制并粘贴为值的代码。但是这个方块不够平滑。顺便说一下,我需要将数据从Sheet2复制到单元格“ Y3”和“ Z3”。因此,下一次将需要更多时间。
答案 0 :(得分:0)
请注意,代替复制/粘贴,您可以使用Cells(i, 24).Value = Cells(i, 24).Value
,它应该更快。另外,如果您不对每个单元都执行此操作,而是一次对整个范围执行一次操作,则会更快:Range("X3", "X" & LastRow).Value = Range("X3", "X" & LastRow).Value
由于您已经确定了编写公式的LastRow
,因此可以使用相同的公式将其转换为值(无循环)。
Sub DailyProgress()
With Sheets(1).Range("X3:X" & .Range("M" & Rows.Count).End(xlUp).Row)
.Formula = "=IFERROR(vlookup(M3,Sheet2!D:O,12,0),Text(,))"
.Value = .Value
End With
End Sub