Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 有没有一种快速的方法可以从工作表中清除大量数据?_Excel_Vba - Fatal编程技术网

Excel 有没有一种快速的方法可以从工作表中清除大量数据?

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

我需要清除同一工作簿中两张工作表中的所有数据(第1行除外)。目前,一张图纸有21000行,另一张图纸有10000行,两张图纸都有26列

当我使用以下代码时,执行大约需要2.5分钟

必须有一个更快的方法来做这件事,因为我可以在不到8秒钟内手动完成

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”)。删除需要多少时间?