Excel 有没有一种快速的方法可以从工作表中清除大量数据?
我需要清除同一工作簿中两张工作表中的所有数据(第1行除外)。目前,一张图纸有21000行,另一张图纸有10000行,两张图纸都有26列 当我使用以下代码时,执行大约需要2.5分钟 必须有一个更快的方法来做这件事,因为我可以在不到8秒钟内手动完成Excel 有没有一种快速的方法可以从工作表中清除大量数据?,excel,vba,Excel,Vba,我需要清除同一工作簿中两张工作表中的所有数据(第1行除外)。目前,一张图纸有21000行,另一张图纸有10000行,两张图纸都有26列 当我使用以下代码时,执行大约需要2.5分钟 必须有一个更快的方法来做这件事,因为我可以在不到8秒钟内手动完成 Sub DeleteExceptFirst() TurnOffFunctionality 'Turn off at the start Dim StartTime As Double StartTime = T
Sub DeleteExceptFirst()
TurnOffFunctionality 'Turn off at the start
Dim StartTime As Double
StartTime = Timer 'Get start time
Dim shCount As Integer
Dim wks As Worksheet
For shCount = 1 To 2
If shCount = 1 Then
Set wks = cnCustomers
Else
Set wks = cnVendors
End If
wks.Rows("2:" & Rows.Count).ClearContents
Next shCount
TurnOnFunctionality 'Turn back on at the end
Call EndTimer("DeleteExceptFirst", StartTime)
End Sub
我将AcsErno的线路合并到一个简单的循环中
Sub deleteallbutfirstrow()
Dim ws As Worksheet
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet 'remember which worksheet is active in the beginning
For Each ws In ActiveWorkbook.Worksheets
ws.UsedRange.Offset(1).ClearContents
Next
starting_ws.Activate 'activate the worksheet that was originally active
End Sub
我将AcsErno的线路合并到一个简单的循环中
Sub deleteallbutfirstrow()
Dim ws As Worksheet
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet 'remember which worksheet is active in the beginning
For Each ws In ActiveWorkbook.Worksheets
ws.UsedRange.Offset(1).ClearContents
Next
starting_ws.Activate 'activate the worksheet that was originally active
End Sub
您正在删除整个范围大小,包括所有列,但仅将删除限制为内容。
由于Z列右边的任何内容都可能包含一大堆空格、额外的格式设置等,VBA在分离单元格信息方面有很多工作要做
提供更快代码执行的简单方法可能是标记整个columns块
手动从AA列到XFD,并将其完全删除。
在第二步中,您可以将纯内容删除限制为所需的26列,例如通过
Dim header: header = wks.Range("A1:Z1")
wks.Range("A:Z").ClearContents
wks.Range("A1:Z1") = header
或者执行完全清除(不限于内容)加上最终(编号/日期)重新格式化整列a:Z
当然,@JohnSUN在评论中提到的损坏工作簿可能会导致大多数问题,因此请遵循他的建议:-)您删除的是整个范围大小,包括所有列,但仅限于内容。
由于Z列右边的任何内容都可能包含一大堆空格、额外的格式设置等,VBA在分离单元格信息方面有很多工作要做
提供更快代码执行的简单方法可能是标记整个columns块
手动从AA列到XFD,并将其完全删除。
在第二步中,您可以将纯内容删除限制为所需的26列,例如通过
Dim header: header = wks.Range("A1:Z1")
wks.Range("A:Z").ClearContents
wks.Range("A1:Z1") = header
或者执行完全清除(不限于内容)加上最终(编号/日期)重新格式化整列a:Z
当然,@JohnSUN在评论中提到的损坏工作簿可能会导致大多数问题,因此请遵循他的建议:-)尝试以下操作:
wks.usedrange.offset(1)。clearcontents
N.B.删除与clearcontents不同。大约2.5分钟?奇怪的结果。对我来说,您在不同数据上执行的过程比一秒钟快好几倍。可能此工作簿中累积了内部错误?有时,通过更改格式多次重新保存工作簿会有所帮助,例如,xlsm->xlsb->xlsm是否有需要重新计算的公式?定期重新检查床单需要多长时间?在每个代码步骤之间的单元格中写入一个时间戳,然后您就可以看到哪些代码步骤花费了这么长的时间。如果是在循环之后,那么recalc就是问题所在,您需要查看文件中的公式。低效的公式会使工作簿急停。wks.Rows(“2:“&Rows.Count”).Delete
需要多少时间?试试这个:wks.usedrange.offset(1)。clearcontents
N.B.Delete与clearcontents不同。大约2.5分钟?奇怪的结果。对我来说,您在不同数据上执行的过程比一秒钟快好几倍。可能此工作簿中累积了内部错误?有时,通过更改格式多次重新保存工作簿会有所帮助,例如,xlsm->xlsb->xlsm是否有需要重新计算的公式?定期重新检查床单需要多长时间?在每个代码步骤之间的单元格中写入一个时间戳,然后您就可以看到哪些代码步骤花费了这么长的时间。如果是在循环之后,那么recalc就是问题所在,您需要查看文件中的公式。低效的公式会使工作簿急停。wks.Rows(“2:“&Rows.Count”)。删除需要多少时间?