【发布时间】:2020-05-02 09:32:48
【问题描述】:
在我的 excel 中,C 列总是会有 response 或 resolution 的文本。我的目标是基于此分隔 A:C 列。如果 C 列有文本 response,则将 A:C 列复制到 E:G,否则将 A:C 复制到 I:K
我现在使用下面的代码:
Sub SLACalc()
Dim DTA As Workbook
Dim SLADATA As Worksheet
Set DTA = Excel.Workbooks("main.xlsm")
Set SLADATA = DTA.Worksheets("SLA DATA")
For i = 2 To SLADATA.Cells(Rows.Count, "A").End(xlUp).Row
If InStr(Cells(i, "C").Value, "response") > 0 Then
SLADATA.Cells(i, "E").Value = SLADATA.Cells(i, "A").Value
SLADATA.Cells(i, "F").Value = SLADATA.Cells(i, "B").Value
SLADATA.Cells(i, "G").Value = SLADATA.Cells(i, "C").Value
Else
SLADATA.Cells(i, "I").Value = SLADATA.Cells(i, "A").Value
SLADATA.Cells(i, "J").Value = SLADATA.Cells(i, "B").Value
SLADATA.Cells(i, "K").Value = SLADATA.Cells(i, "C").Value
End If
Next i
End Sub
当我在A:C 中的行较少时,这可以正常工作。现在我的行数接近 20,000 行,并且在使用 excel 时面临很多性能问题。无论如何我可以改进代码以更快地运行它。
【问题讨论】:
-
添加
Application.ScreenUpdating = False会减少持续时间。 -
将你的整个数据读入一个VBA数组(一行代码);在代码中拆分成另一个 VBA 数组;然后将其写回工作表(也是一行代码)。多个工作表的读/写是一直需要的。
标签: excel vba excel-formula