使用VBA格式化excel电子表格中的数据

时间:2016-11-14 21:42:46

标签: excel vba excel-vba

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

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

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

我为每个新名称重复此代码。是否有更简洁的方式来编写使用较少文本的内容?可能是一种允许我将数组中的所有课程名称列为键值对的方式,这样就更容易维护。感谢

1 个答案:

答案 0 :(得分:1)

我认为最好使用字典结构并循环遍历范围(G列)中的每个单元格,然后评估,而不是通过查找/替换字符串列表如果短语在字典中。

在短语列表上的列上查找/替换将非常昂贵,因为每次搜索都将遍历该范围中的每个值。如果你有1,000个短语替换和1,000,000行,你最好去三明治,因为它会有一段时间。

使用集合循环遍历范围更好,但仍然不如字典。与可以是O(n)的标准集合/列表搜索相比,字典搜索是O(1)。这对于非匹配非常重要,其中收集方法会让您在发现没有匹配之前浏览集合中的每个项目 - 如果匹配则字典立即知道,如果匹配,那么它是什么。

这是一个关于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行。