我有一个电子表格,每周用于将数据导入数据库。
数据必须经过格式化才能正确导入。
我想使用VBA格式化数据,而不是手动处理。
重新打开XL工作簿时,此代码将数据更改为特定名称:
Option Explicit
Private Sub Workbook_Open()
'course name changes
Columns("G:G").Select
Selection.Replace What:="Course Name", replacement:="New Course Name", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _ False, ReplaceFormat:=False
我为每个新名称重复此代码。有没有一种使用更少文本的简洁方法?可能的一种方法是,我可以将数组中的所有课程名称作为键值对列出,这样可以更轻松地进行维护。谢谢
我认为与其使用查找/替换字符串列表,不如使用字典结构并一次遍历范围(G列)中的每个单元格并评估该短语是否在字典中,会更好。
在短语列表中的列上进行查找/替换将非常昂贵,因为每次搜索都将遍历该范围内的每个值。如果您有1000个词组替换和1,000,000行,那么您最好去一个三明治,因为这将需要一段时间。
使用集合在范围内循环比较好,但仍然不如字典。字典搜索为O(1),而标准搜索/列表搜索可以为O(n)。这对于不匹配项非常重要,在这种情况下,采用收集方法可以让您先遍历集合中的每个项目,然后再发现不存在匹配项-字典会立即知道是否存在匹配项,如果匹配,它是什么。
这是一个如何在G列上工作的示例:
Sub ReplacePhrases()
Dim dict As New Dictionary
Dim row, lastRow As Long
Dim replace As String
dict.Add "Course Name", "New Course Name"
dict.Add "VBA, 2nd Edition", "VBA 3rd Edition"
lastRow = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
For row = 1 To lastRow
replace = dict(Cells(row, 7).Value2)
If replace <> "" Then
Cells(row, 7).Value2 = replace
End If
Next row
End Sub
dict.Add
可以通过遍历另一个工作表中的单元格列表,文件中的行,数据库中的行或其他您认为合适的行来替换这些行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句