根据当前工作簿中的匹配值编辑主工作簿中的单元格

这里的目标是比较两个工作簿之间的列“A”中的值(当前工作簿是.xlsm,目标工作簿是.xlsx)。 如果发现任何比赛; 在目标工作簿中更改匹配值的同一行的“E”列中的值。 在这种情况下,必须保持工作簿的分离。

我决定通过select当前工作簿(A2)中的第一个值,将其值应用于variables,然后扫描目标工作簿中的列“A”来查找匹配项(至less应该有一个匹配项),从而做到这一点。 然后将目标工作簿中“E”列的值更改为匹配行的“DSC”。 之后,当前工作簿中选定的单元格向下移动一个,并循环该过程,直到到达空白单元格。

这里是目前的代码:

Sub DSC() Dim RowCount As Long secondWorkbook = "Master.xlsx" currentWorkbook = ThisWorkbook.Name Workbooks.Open ThisWorkbook.Path & "\" & secondWorkbook ' Define number of rows RowCount = Workbooks("Master.xlsx").Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row ' Select First Cell Windows(currentWorkbook).Activate Worksheets("Update Wipe").Activate Range("A2").Select Serial = ActiveCell.Value Windows(secondWorkbook).Activate Worksheets("Sheet1").Activate ' Run Function For c = 2 To (RowCount - 1) Windows(secondWorkbook).Activate If Sheet1.Cells(c, 1).Value = Serial Then Sheet1.Cells(c, 5) = "DSC" Windows(currentWorkbook).Activate Worksheets("Update Wipe").Activate Selection.Offset(1, 0).Select Serial = ActiveCell.Value If Serial = "" Then Exit For End If Next c End Sub 

目前没有错误返回,但是目标工作簿中没有更新。 它将在计算机上打开目标工作簿。 反弹popup活动工作簿和工作表以更改所选单元格并更新variables可能是原因。

这是一个简单的工作示例。

您需要将Range("A1:A20")更改为您要比较的范围。

您也可以将Sheet("Sheet1")更改为正确的页面。

AWorkbook.xlsm工作簿。

MasterWorkbook.xlsx工作簿。

正如你所看到的,没有必要使用select。

您可以使用ForFor Each循环遍历单元格。

通过嵌套for循环,你可以比较单元格,虽然对于较大的数据集,我可能会使用FindFindNext而不是循环单元格。

在此macros中,循环遍历macros工作簿中的每个单元格,并将其与目标工作簿中的每个单元格进行比较。

如果值匹配,我将DSC放在目标工作簿( E栏)

最后,closures工作簿( SaveChanges:=True

 Sub DSC() Dim AWorkbook, MasterWorkbook, c, d, ALastRow, MLastRow Set AWorkbook = ThisWorkbook Set MasterWorkbook = Workbooks.Open(ThisWorkbook.Path & "\" & "MasterWorkbook.xlsx", ReadOnly:=False) ALastRow = AWorkbook.Sheets("Sheet1").Cells(Rows.CountLarge, "A").End(xlUp).Row MLastRow = MasterWorkbook.Sheets("Sheet1").Cells(Rows.CountLarge, "A").End(xlUp).Row For Each c In AWorkbook.Sheets("Sheet1").Range("A2:A" & ALastRow) For Each d In MasterWorkbook.Sheets("Sheet1").Range("A2:A" & MLastRow) If c.Value = d.Value Then MasterWorkbook.Sheets("Sheet1").Cells(d.Row, "E").Value = "DSC" Next d Next c MasterWorkbook.Close (True) End Sub 

从工作表(“更新擦除”)的列A载入所有值。 使用字典键打开主工作簿和自动筛选器。 将“DSC”放入E列的所有可见单元格中

 Option Explicit Sub DSC() Dim mWB As Workbook Dim masterWorkbook As String, c As Long, rowCount As Long, serial As Variant Dim k As Long, dict As Object Set dict = CreateObject("Scripting.Dictionary") dict.comparemode = vbTextCompare With ThisWorkbook.Worksheets("Update Wipe") For k = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row dict(.Cells(k, "A").Value2) = vbNullString Next k End With masterWorkbook = "Master.xlsx" Set mWB = Workbooks.Open(ThisWorkbook.Path & "\" & masterWorkbook) With mWB.Worksheets("Sheet1") If .AutoFilterMode Then .AutoFilterMode = False With .Cells(1, "A").CurrentRegion .AutoFilter field:=1, Criteria1:=dict.keys, Operator:=xlFilterValues With .Resize(.Rows.Count - 1, 5).Offset(1, 0) If CBool(Application.Subtotal(103, .Cells)) Then .Columns("E").SpecialCells(xlCellTypeVisible) = "DSC" End If End With End With If .AutoFilterMode Then .AutoFilterMode = False 'optionally close the master workbook '.Parent.Close savechanges:=True End With End Sub