Excelmacros来比较行

我正在尝试做下面的例子,不能做到这一点。

Sheet1中的Excel数据:

id Sysid option status XYZ XT Open status_1 US XT Close Status_1 US XT Open Stauts_2 NJ XT Open Status_2 IND VX Close Status_1 BAN VX Open Status_1 CHN XY Open Status_1 YST xy Close Status_1 

在上面的数据中,Status_1和Sysid定义了唯一的logging,基于这个条件,我必须找出哪些logging具有独特的logging组合的开放差异。 如果选项不同,我必须将这些数据复制到不同的工作表使用Excelmacros。这应该只适用于ID的美国和CHN.Suppose如果ID有美国,它应该比较基于sysid和状态的匹配logging。 任何帮助赞赏。

输出如下:

  XYZ XT Open status_1 US XT Close Status_1 CHN XY Open Status_1 YST xy Close Status_1 

编辑包括testing“美国”或“CHN”

 Sub Tester() Const COL_ID As Integer = 1 Const COL_SYSID As Integer = 2 Const COL_STATUS As Integer = 4 Const COL_OPTION As Integer = 3 Const VAL_DIFF As String = "XXdifferentXX" Dim d As Object, sKey As String, id As String Dim rw As Range, opt As String, rngData As Range Dim rngCopy As Range, goodId As Boolean Dim FirstPass As Boolean, arr With Sheet1.Range("A1") Set rngData = .CurrentRegion.Offset(1).Resize( _ .CurrentRegion.Rows.Count - 1) End With Set rngCopy = Sheet1.Range("F2") Set d = CreateObject("scripting.dictionary") FirstPass = True redo: For Each rw In rngData.Rows sKey = rw.Cells(COL_SYSID).Value & "<>" & _ rw.Cells(COL_STATUS).Value If FirstPass Then 'Figure out which combinations have different option values ' and at least one record with id=US or CHN id = rw.Cells(COL_ID).Value goodId = (id = "US" Or id = "CHN") opt = rw.Cells(COL_OPTION).Value If d.exists(sKey) Then arr = d(sKey) 'can't modify the array in situ... If arr(0) <> opt Then arr(0) = VAL_DIFF If goodId Then arr(1) = True d(sKey) = arr 'return [modified] array Else d.Add sKey, Array(opt, goodId) End If Else 'Second pass - copy only rows with varying options ' and id=US or CHN If d(sKey)(0) = VAL_DIFF And d(sKey)(1) = True Then rw.Copy rngCopy Set rngCopy = rngCopy.Offset(1, 0) End If End If Next rw If FirstPass Then FirstPass = False GoTo redo End If End Sub 

使用macroslogging器,对数据做一个独特的高级filter,然后你可以进行比较。

http://office.microsoft.com/en-us/excel-help/filter-for-unique-records-HP003073425.aspx?CTT=3