首页 > 解决方案 > 如何让清洁功能更高效?

问题描述

我在 Excel 工作表上运行 VBA,它可以转换工作表中的数据,以便我可以将其导入另一个应用程序。

下面的函数清理数据并删除文本换行。当工作表具有大量单元格数时,此功能需要很长时间才能运行。由于我正在规范化数据以导入关系数据库,因此我拥有的七个不同工作表中经常有很多单元格。

有没有更有效的方法来删除文本换行并清理单元格中的数据?

Dim ws As Worksheet
Dim x, lrow, lcol, active As Long
Dim r, cel As Range

active = ActiveWorkbook.Worksheets.count
For x = 1 To active
    Set ws = ThisWorkbook.Sheets(x)
    ws.Select
    Select Case ws.name
        Case "Solution", "Description", "Problem", "Buyer", "ProjectType", "Process", "Feature"
            lrow = ws.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).row
            lcol = ws.UsedRange.Columns(ActiveSheet.UsedRange.Rows.count).Column
            If lrow > 1 Then
                Set r = ws.Range(Cells(2, 1), Cells(lrow, lcol))
                For Each cel In r.Cells
                    cel.WrapText = False
                    cel.Value = Application.WorksheetFunction.Clean(cel.Value)
                Next cel
            End If
        Case Else
    End Select
    ws.Cells(1, 1).Select

ThisWorkbook.Sheets("Solution").Activate
Next x

标签: excelvba

解决方案


您的代码可以简化为

Sub Demo()
    Dim ws As Worksheet

    For Each ws In ActiveWorkbook.Worksheets
        Select Case ws.Name
            Case "Solution", "Description", "Problem", "Buyer", "ProjectType", "Process", "Feature"
                With ws.UsedRange
                    .WrapText = False
                    .Value = ws.Evaluate("Clean(" & .Address & ")")
                End With
        End Select
    Next
End Sub

在我的硬件上,一张 100,000 行 26 列的工作表在大约 6 秒内运行

注意:OP 声称(在评论中)“它将工作表上每个单元格的值更改为它遇到的第一个工作表中的第一个值。” - 测试了这个说法,它不准确。此代码如宣传的那样工作。


推荐阅读