需要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一个名为Key
的Collection
,每个Item
都是位置Collection
, Key
是位置文本, Item
是包含位置文本的Range
(即单元格)。
将Collection
包装在Class Module
并添加一个属性来设置列表范围。 在范围设置器中,调用例程来构buildCollection
。
然后添加一个属性来获取特定名称的位置Collection
。
然后,可以创build两个Class
实例,一个名为oldList,另一个名为newList,并创build一个非常简单的循环来比较它们并pipe理位置单元格的格式。