需要VBA循环逻辑

我有两个列表在Excel中进行比较。 这是一个很长的名单,我需要一个Excel函数或VBA代码来做到这一点。 我已经用尽了想法,因此转向你:

**Old List** A Jersey City London B Banglore London Stamford C Hong Kong Hyderabad Singapore **New List** B Banglore London Stamford C Hyderabad Singapore 

名称在列A和列B中的位置

所需逻辑:

  • 比较每个名称的位置
  • 如果新列表中的位置与旧列表不同,例如:1)添加了新位置2)位置数量仍然相同,但是这些位置是新位置。 然后突出显示,或在下一栏中说“新位置”/任何东西,以确定这是从旧名单的变化

感谢和问候Varun

一个简单的查找可以让你解决这个问题。 例如:

 [C2] =OFFSET(Old_List!A:A;MATCH(B2;Old_List!B:B;0)-1;0;1;1) 

将在C2中填入相应的旧名称的C2。

 [D2] =A2=C2 

当旧名称与新名称相同时,将填写D2;否则为否,否则为新名称,旧名单中未find#N/A

此代码假定您的旧清单和新清单在单独的工作表中。 您将需要编辑代码以反映实际的工作表名称。 如果find所有重复的名字,然后检查城市是否已经改变。 如果城市发生了变化,它将在旧名单和新名单上突出显示城市。

编辑:没有testing,但尝试这样的事情! 查找名称匹配,在两张表上设置与该名称关联的给定范围的位置,比较单元格并突出显示在两个范围内都找不到的单元格。 请记住,这只适用于出现在两张纸上的名字。

编辑2:代码更新 – testing和工作。

 Sub DupChange() Dim CurRow, LastRow, DestRow, DestLast, ChkRow, DestChk As Long Dim OldL, NewL As Worksheet Dim ChkRng, DestRng As Range Dim ChkCel, DestCel As Range Set OldL = Sheets("Old List") Set NewL = Sheets("New List") LastRow = OldL.Range("B" & Rows.Count).End(xlUp).Row DestLast = NewL.Range("B" & Rows.Count).End(xlUp).Row For CurRow = 2 To LastRow '(assuming you have a header in row 1) If Not OldL.Cells(CurRow, 1).Value = "" Then ChkRow = OldL.Cells(CurRow, 1).End(xlDown).Row - 1 If ChkRow > LastRow Then ChkRow = LastRow Else End If Set ChkRng = OldL.Range("A" & CurRow & ":A" & ChkRow).Offset(0, 1) For DestRow = 2 To DestLast If OldL.Cells(CurRow, 1).Value = NewL.Cells(DestRow, 1).Value Then DestChk = NewL.Cells(DestRow, 1).End(xlDown).Row - 1 If DestChk > DestLast Then DestChk = DestLast Else End If Set DestRng = NewL.Range("A" & DestRow & ":A" & DestChk).Offset(0, 1) For Each ChkCel In ChkRng If DestRng.Find(ChkCel.Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then ChkCel.Interior.Color = RGB(255, 0, 0) Else End If Next For Each DestCel In DestRng If ChkRng.Find(DestCel.Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then DestCel.Interior.Color = RGB(255, 0, 0) Else End If Next Else End If Next DestRow Else End If Next CurRow End Sub 

我想要的基本架构如下:

构build一个名为KeyCollection ,每个Item都是位置CollectionKey是位置文本, Item是包含位置文本的Range (即单元格)。

Collection包装在Class Module并添加一个属性来设置列表范围。 在范围设置器中,调用例程来构buildCollection

然后添加一个属性来获取特定名称的位置Collection

然后,可以创build两个Class实例,一个名为oldList,另一个名为newList,并创build一个非常简单的循环来比较它们并pipe理位置单元格的格式。