【问题标题】:VBscript optimize Excel Search and DeleteVBscript优化Excel搜索和删除
【发布时间】:2018-10-07 05:07:48
【问题描述】:

我有这个我能够构建的 VBScript 函数,它打开用户指定的 excel 文件,并开始解析 Sheet 3 的 C 列以查看类别是什么。如果类别不是“水果”,我希望删除整行。该功能按预期工作。但是,我注意到它的效率非常低(100 行大约需要 3 秒),我需要能够扫描近 11 000 行。有没有一种方法可以优化搜索,以便只需几秒钟就可以浏览所有记录?

   Function prepFile(usrFileSelected)
        Set objExcel = CreateObject("Excel.Application")
        Set objWorkbook = objExcel.Workbooks.Open(usrFileSelected)
        objExcel.Sheets("Sheet3").Activate
        intRow = 2
        maxRow = objExcel.ActiveSheet.UsedRange.Rows.Count
        Do while intRow <= 1000
            currentValue = objExcel.Cells(3,intRow).value

            If currentValue <> "Fruit" then
                objExcel.Rows(intRow).EntireRow.Delete
            End If
            intRow = intRow + 1 
        Loop
        msgbox("Done")
        objWorkbook.Save
        objWorkbook.Close
    End Function

【问题讨论】:

  • 那是因为 Excel 不是数据库(尽管许多人认为它是)。为正确的工作使用正确的工具总是值得的。

标签: vbscript


【解决方案1】:

我的第一次尝试是禁用screen updating

Sub prepFile(usrFileSelected)
    Dim Excel, Row

    Set Excel = CreateObject("Excel.Application")
    Excel.ScreenUpdating = False

    With Excel.Workbooks.Open(usrFileSelected)
        For Each Row In .Sheets("Sheet3").UsedRange.Rows
            If Row.Cells(3).Value <> "Fruit" Then Row.EntireRow.Delete
        Next
        .Save
        .Close
    End With

    Excel.Quit
End Sub

下一个优化想法是使用 Excel 的 .Find method 看看这是否比手动方法更快。

【讨论】:

    猜你喜欢
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多