VBscript比较给定行的两个Excel表中的一些列的内容

我是VB脚本新手,请耐心等待。 我有两张表,代表一个旧的数据库和一个新的数据库,结构如下

AB(key) CDEF 

837 | 15287RI0300002 | 个人| SelectRI | 直接| 新计划

 AB(key) CDEFGH 

837 | 15287RI0300002 | 个人| 评分1 | 评级2 | SelectRI | 直接| 新计划

我必须根据关键比较一行的内容,并突出显示差异。 现在的问题是,列没有sorting。 因此,我需要从一张纸到另一张的映射。

任何人都可以帮我一个VBScript? 请尝试提供一个通用的解决scheme,因为我在工作簿中有多个工作表。

PS

  1. 行不sorting
  2. 这些表是在单独的工作簿
  3. 旧表中的键一直存在于新表中是没有必要的。

由于旧的和新的数据库中的列不相同,因此映射需要由您编写。 一种可能性是在单独的工作表中创build一个表格,在其中指定哪个列对应于哪个列。 很难维护,切换所有的时间和检查。

另一种可能性是在新数据库的表格顶部插入一行,并将旧数据库列标题的名称写入其中。 然后,你可以做这样的事情(而下面的代码假设你已经覆盖头,而不是在上面插入一行,所以你可能不得不适应这个)

 Sub compare() 'Lots of vars... Dim shtOld As Worksheet, shtNew As Worksheet Dim keyOld As Range, keyNew As Range Dim rOld As Range, rNew As Range Dim colOld As Range, colNew As Range Dim numColsOld As Integer, numColsNew As Integer, i As Integer, k As Integer 'Set Set shtOld = ThisWorkbook.Sheets(1) Set shtNew = ThisWorkbook.Sheets(2) numColsOld = shtOld.UsedRange.Columns.Count numColsNew = shtNew.UsedRange.Columns.Count 'Loop column B of old DB For k = 1 To shtOld.UsedRange.Rows.Count - 1 Set keyOld = shtOld.Range("B" & k + 1) 'Find key in other sheet (assuming key is always in B, 'else do a column search here as well, see below) Set keyNew = shtNew.Range("B:B").Find(keyOld.Value, LookIn:=xlValues) If Not keyNew Is Nothing Then Debug.Print "Found key at: " & keyNew.Address 'Loop Cols For i = 1 To numColsOld Set colOld = shtOld.Cells(1, i) 'starting from A, the first to the left 'Find column header in New Set colNew = shtNew.Range("A1:" & Cells(1, numColsNew).Address).Find(colOld.Value, LookIn:=xlValues) If Not colNew Is Nothing Then Debug.Print "Found Column at: " & colNew.Column Set rOld = shtOld.Cells(keyOld.Row, colOld.Column) Set rNew = shtNew.Cells(keyNew.Row, colNew.Column) If rOld <> rNew Then rNew.Interior.ColorIndex = 24 End If Set newcol = Nothing Next i End If Set newkey = Nothing Next k 'Cleanup Set rOld = Nothing Set rNew = Nothing Set shtOld = Nothing Set shtNew = Nothing End Sub