使用VBA在Excel电子表格中格式化数据

我有一个电子表格,每周用于将数据导入数据库。

数据必须以特定的方式格式化才能正确导入。

我想用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 

我重复这个代码为每个新的名字。 有没有更简洁的方式来写这个使用较less的文本? 可能是一种让我列出数组中所有课程名称作为关键值对的方式,这样可以更容易地进行维护。 谢谢

我认为使用字典结构并遍历范围(列G)中的每个单元格一次并评估该短语是否在字典中会更好,而不是通过查找/replacestring的列表。

在短语列表上的列上查找/replace将是非常昂贵的,因为每个search将遍历该范围中的每个值。 如果你有1000个短语replace和1,000,000行,你最好去拿一个三明治,因为这将是一段时间。

使用集合遍历范围更好,但仍然不如字典。 词典search是O(1),而标准的搜集/列表search可以是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行可以通过遍历另一个工作表中的单元格列表,文件中的行,数据库中的行或您认为合适的任何其他内容来替代。