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

时间:2017-05-09 20:53:32

标签: excel vba excel-vba

这里的目标是比较列#34; A"两个工作簿之间(当前工作簿是.xlsm,目标工作簿是.xlsx)。如果找到任何匹配项;列" E"中的值在匹配值的同一行上,在目标工作簿中更改。在这种情况下,必须将工作簿分开。

我决定通过选择当前工作簿中的第一个值(A2),将其值应用于变量,然后扫描列" A"来决定这样做。在目标工作簿中查找匹配项(应始终至少有一个匹配项)。然后更改列#34; E"的值在目标工作簿中,以#DSC; 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

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

2 个答案:

答案 0 :(得分:0)

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

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

您也可以将Sheet("Sheet1")更改为正确的工作表。

AWorkbook.xlsm工作簿。

MasterWorkbook.xlsx工作簿。

如您所见,没有必要使用select。

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

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

在这个宏中,我遍历宏工作簿中的每个单元格,并将其与目标工作簿中的每个单元格进行比较。

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

最后,关闭工作簿(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

答案 1 :(得分:0)

将Worksheets(“Update Wipe”)的列A anto中的所有值加载到字典中。使用字典键打开主工作簿和自动筛选器。将“DSC”放入E列的所有可见细胞中。

function setMarginTop() {
    const $header = $(".header__content--container");
    const marginTop = $header.css("margin-top");
    $header.css("margin-top", marginTop);
}