我在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列中的位置
逻辑需要:
谢谢和问候 VARUN
答案 0 :(得分:0)
此代码假定您的旧列表和新列表位于单独的表格中。您需要编辑代码以反映实际的工作表名称。如果找到所有重复的名称,然后检查城市是否已更改。如果城市已更改,则会在旧列表和新列表中突出显示该城市。
编辑:Haven未经过测试,但尝试这样的事情!查找名称匹配项,在两个工作表上设置与该名称关联的给定位置范围,比较单元格并突出显示在两个范围中均未找到的任何单元格。请注意,这仅适用于两张纸上显示的名称。
编辑2:代码更新 - 经过测试和工作。
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
答案 1 :(得分:0)
简单的查找将允许您解决此问题。 例如:
[C2] =OFFSET(Old_List!A:A;MATCH(B2;Old_List!B:B;0)-1;0;1;1)
将使用相应的旧名称填写C2以获取B2中的位置。
[D2] =A2=C2
当旧名称与新名称相同时,将使用True
填充D2;如果名称为新名称,则False
将填充#N/A
,并且在旧列表中找不到。
答案 2 :(得分:0)
我将使用的基本架构如下:
构建Collection
,其名称为Key
,每个Item
为Collection
个位置,其中Key
为位置文本,Item
1}}是包含位置文本的Range
(即单元格)。
将Collection
换行Class Module
并添加属性以设置列表范围。
在Range setter中,调用例程来构建Collection
。
然后添加一个属性以获取特定名称的位置Collection
。
然后,您可以创建Class
的两个实例,一个名为oldList,一个名为newList,并创建一个非常简单的循环来比较它们并管理位置单元格的格式。