lastRow = Cells(Rows.Count, "G").End(xlUp).Row For i = 2 To lastRow ' Assuming data starts from row 2 If Not IsEmpty(Cells(i, "G")) And IsDate(Cells(i, "G")) Then Cells(i, "o").Value = "Τ" End If If Not IsEmpty(Cells(i, "H")) And IsDate(Cells(i, "H")) Then Cells(i, "o").Value = "Τ" End If Next i 修改這段代碼,數據很大,循環運行很慢,修改為運行速度很快的代碼
时间: 2024-04-08 13:33:13 浏览: 109
您可以尝试使用数组来优化循环运行速度。以下是修改后的代码:
```vba
Dim lastRow As Long
Dim dataRange As Range
Dim dataArray As Variant
Dim i As Long
lastRow = Cells(Rows.Count, "G").End(xlUp).Row
Set dataRange = Range("G2:H" & lastRow) ' Assuming data starts from row 2
' 将数据范围转换为数组
dataArray = dataRange.Value
' 遍历数组进行处理
For i = 1 To UBound(dataArray, 1)
' 检查列G是否非空且为日期类型
If Not IsEmpty(dataArray(i, 1)) And IsDate(dataArray(i, 1)) Then
dataArray(i, 1) = "Τ"
End If
' 检查列H是否非空且为日期类型
If Not IsEmpty(dataArray(i, 2)) And IsDate(dataArray(i, 2)) Then
dataArray(i, 1) = "Τ"
End If
Next i
' 将修改后的数组值写回到单元格
Range("O2").Resize(UBound(dataArray, 1), 1).Value = dataArray
```
通过将数据范围转换为数组,您可以在内存中进行操作,而不是直接在单元格上进行操作,从而提高运行速度。最后,将修改后的数组值写回到单元格。请注意,该代码假设数据从第2行开始,并将结果写入到列O中。如果您有其他要求,请进行相应的修改。
阅读全文