excel - 如何让清洁功能更高效?
问题描述
我在 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
解决方案
您的代码可以简化为
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 声称(在评论中)“它将工作表上每个单元格的值更改为它遇到的第一个工作表中的第一个值。” - 测试了这个说法,它不准确。此代码如宣传的那样工作。
推荐阅读
- http - Telnet 端口 80 可以工作,但 http 浏览不能... 两个不同的网络?这可能是什么?
- postgresql - Postgresql - 除以两个整数后,我得到一个零
- vb.net - 在 VB.net 中,使用 OLEDB 在一次执行中,如何更新在“GROUP BY ... HAVING COUNT(*) ...”查询中也引用的列值?
- speech-to-text - Google Speech To Text API:实时获取中间结果的单词置信度
- reactjs - ReactJS 分页帮助按钮无法正常工作
- string - 具有大写和相应小写字符的最小窗口(子字符串)
- rust - 在这种情况下,to_owned() 和 clone() 有什么区别?
- laravel - Laravel如何使用回调函数将失败的作业发送回队列?
- python - Django 对象不保存
- javascript - 使用 Vue 插件的 Vite MPA 是如何工作的?