如何比较来自两个不同 excel 工作簿的列
How to compare columns from two different excel workbooks
我有一个 Excel-Workbook,它有两个 sheets 'Task' 和 'Cities'。
我需要将 'Task' sheet 中的记录验证代码与 'Cities' Sheet.
中的记录进行比较
我可以按如下方式进行:
Dim CityString As String
Dim CityArray() As String
'Get the last row
'Dim lastRow As Integer
LastRow = Sheets("Task").UsedRange.Rows.Count
nLastRowSheet2 = Sheets("Cities").UsedRange.Rows.Count
Dim c As Range
Dim d As Range
Dim e As Variant
'Turn screen updating off to speed up macro code.
'User won't be able to see what the macro is doing, but it will run faster.
Application.ScreenUpdating = False
For Each c In Worksheets("Task").Range("A2:A" & LastRow)
CityString = c
CityArray() = Split(CityString, ";")
For Each e In CityArray()
e = Trim(e)
Dim rngFnder As Range
On Error Resume Next
Set rngFnder = Sheets("Cities").Range("A2:A" & nLastRowSheet2).Find(e)
If rngFnder Is Nothing Then
c.Interior.Color = vbRed
End If
On Error GoTo 0
Next
Next
现在我有另一个要求,我必须从两个不同的工作簿中执行相同的操作。
('Task' 和 'Cities' sheet 在两个不同的工作簿上)
谁能告诉我;我必须对上述代码进行哪些更改?
当你说 "on two different excelssheets" 我猜你的意思是它们在不同的 Excel 工作簿文件中?
当您使用以下行时,您指的是活动工作簿中的 sheet "Task"。
Worksheets("Task").Range("A2:A" & LastRow)
您应该指定工作簿,以免写错。 Using thisWorkbook 是指带有代码的工作簿,例如
ThisWorkbook.Worksheets("Task").Range("A2:A" & LastRow)
要访问任何打开的工作簿,包括当前工作簿,请使用
Workbooks("example.xls").Worksheets("Task").Range("A2:A" & LastRow)
如果工作簿已关闭,您可以使用
打开它
dim wrk as Workbook
set wrk = Workbooks.Open("C:\Docs\example.xls")
wrk.Worksheets("Task").Range("A2:A" & LastRow)
如果您想了解更多关于 VBA 中的工作簿的信息,您可以阅读 here
我准备了另一个名为 'Sample_Data.xlsx' 的工作簿,在该工作簿下我将有一个 sheet 'cities'.
所以我必须在下面的代码中的其他地方进行更改才能使其正常工作;当我的 'Sample_Data.xlsx' 工作簿关闭时。
下面的代码打开工作簿;但不做验证。
Dim CityString As String
Dim CityArray() As String
'Get the last row
'Dim lastRow As Integer
LastRow = Sheets("Task").UsedRange.Rows.Count
Dim wrk As Workbook
Set wrk = Workbooks.Open("E:\Final\Sample_Data.xlsx")
nLastRowSheet2 = wrk.Worksheets("cities").UsedRange.Rows.Count
Dim c As Range
Dim d As Range
Dim e As Variant
'Turn screen updating off to speed up macro code.
'User won't be able to see what the macro is doing, but it will run faster.
Application.ScreenUpdating = False
For Each c In Worksheets("Task").Range("A2:A" & LastRow)
CityString = c
CityArray() = Split(CityString, ";")
For Each e In CityArray()
e = Trim(e)
Dim rngFnder As Range
On Error Resume Next
Set rngFnder = wrk.Sheets("Cities").Range("A2:A" & nLastRowSheet2).Find(e)
If rngFnder Is Nothing Then
c.Interior.Color = vbRed
End If
On Error GoTo 0
Next
Next
我有一个 Excel-Workbook,它有两个 sheets 'Task' 和 'Cities'。 我需要将 'Task' sheet 中的记录验证代码与 'Cities' Sheet.
中的记录进行比较我可以按如下方式进行:
Dim CityString As String
Dim CityArray() As String
'Get the last row
'Dim lastRow As Integer
LastRow = Sheets("Task").UsedRange.Rows.Count
nLastRowSheet2 = Sheets("Cities").UsedRange.Rows.Count
Dim c As Range
Dim d As Range
Dim e As Variant
'Turn screen updating off to speed up macro code.
'User won't be able to see what the macro is doing, but it will run faster.
Application.ScreenUpdating = False
For Each c In Worksheets("Task").Range("A2:A" & LastRow)
CityString = c
CityArray() = Split(CityString, ";")
For Each e In CityArray()
e = Trim(e)
Dim rngFnder As Range
On Error Resume Next
Set rngFnder = Sheets("Cities").Range("A2:A" & nLastRowSheet2).Find(e)
If rngFnder Is Nothing Then
c.Interior.Color = vbRed
End If
On Error GoTo 0
Next
Next
现在我有另一个要求,我必须从两个不同的工作簿中执行相同的操作。
('Task' 和 'Cities' sheet 在两个不同的工作簿上)
谁能告诉我;我必须对上述代码进行哪些更改?
当你说 "on two different excelssheets" 我猜你的意思是它们在不同的 Excel 工作簿文件中?
当您使用以下行时,您指的是活动工作簿中的 sheet "Task"。
Worksheets("Task").Range("A2:A" & LastRow)
您应该指定工作簿,以免写错。 Using thisWorkbook 是指带有代码的工作簿,例如
ThisWorkbook.Worksheets("Task").Range("A2:A" & LastRow)
要访问任何打开的工作簿,包括当前工作簿,请使用
Workbooks("example.xls").Worksheets("Task").Range("A2:A" & LastRow)
如果工作簿已关闭,您可以使用
打开它dim wrk as Workbook
set wrk = Workbooks.Open("C:\Docs\example.xls")
wrk.Worksheets("Task").Range("A2:A" & LastRow)
如果您想了解更多关于 VBA 中的工作簿的信息,您可以阅读 here
我准备了另一个名为 'Sample_Data.xlsx' 的工作簿,在该工作簿下我将有一个 sheet 'cities'.
所以我必须在下面的代码中的其他地方进行更改才能使其正常工作;当我的 'Sample_Data.xlsx' 工作簿关闭时。 下面的代码打开工作簿;但不做验证。
Dim CityString As String
Dim CityArray() As String
'Get the last row
'Dim lastRow As Integer
LastRow = Sheets("Task").UsedRange.Rows.Count
Dim wrk As Workbook
Set wrk = Workbooks.Open("E:\Final\Sample_Data.xlsx")
nLastRowSheet2 = wrk.Worksheets("cities").UsedRange.Rows.Count
Dim c As Range
Dim d As Range
Dim e As Variant
'Turn screen updating off to speed up macro code.
'User won't be able to see what the macro is doing, but it will run faster.
Application.ScreenUpdating = False
For Each c In Worksheets("Task").Range("A2:A" & LastRow)
CityString = c
CityArray() = Split(CityString, ";")
For Each e In CityArray()
e = Trim(e)
Dim rngFnder As Range
On Error Resume Next
Set rngFnder = wrk.Sheets("Cities").Range("A2:A" & nLastRowSheet2).Find(e)
If rngFnder Is Nothing Then
c.Interior.Color = vbRed
End If
On Error GoTo 0
Next
Next