在两个工作簿中查找匹配的值,如果满足条件,则进行标记



我不确定这是否可能,但这就是我想做的: 我有两个不同的工作簿。

工作簿 A 中的每一行在 C 列中包含一个值。 1.在工作簿B的C列中找到值(不仅仅是行号), 2. 移动到同一行中的 G 列。 如果 G 列中的值为零,请返回到工作簿 A 并在 H 列中输入 0。 如果值不是零,请在工作簿 A 的 H 列中输入 1。 3. 继续,直到没有更多的有效行 在工作簿 A 中搜索(可变编号)。

我有大约 200 个工作表要匹配(相同的工作表名称,不同的工作簿),所以我想确保 VBA 知道转到正确的工作表。我很乐意自己为每个工作表手动更改代码。这是否只是通过转到工作簿 A 中的 #### 和工作簿 B 中的 #### 来完成的?

我对 VBA 基本上为零,所以我甚至不确定从哪里开始。我认为这将是一堆如果语句?

谢谢!

你需要的几种武器:

  1. Range.Find(key)返回与键匹配的范围对象。
  2. Range.Offset(r, c)返回向下r行和向右c列的范围。
  3. 由于工作簿 A 中的数据是可变的,因此可以使用Range("C" & Rows.Count).End(xlUp)获取数据的最后一行。
  4. 循环浏览工作簿中的工作表可以通过以下代码实现

    Dim ws As Worksheets
    For Each ws In ThisWorkbook
    'do something
    Next ws
    
  5. 您可以通过ws.Name获取工作表名称,并按Workbook.Worksheets(name)调用具有该名称的工作表

所以这里有一个代码,你需要自己调整。

Private Sub test()
Application.ScreenUpdating = False
'Assuming the code is in workbook A, and we open workbook B here
Dim wbA As Workbook, wbB As Workbook
Set wbA = ThisWorkbook
'May get a failure when the path is incorrect
Set wbB = Workbooks.Open("FULL PATH OF WORKBOOK B")
Dim lastRow As Long, i As Long
Dim ws As Worksheet
'Loop throuth wbA.Worksheets so we can get the job done in each worksheet
For Each ws In wbA.Worksheets
'Getting the last row in column C
lastRow = ws.Range("C" & ws.Rows.Count).End(xlUp).Row
'ws.Name to get the name, and find it in workbook B
'May get a failure if there is no worksheet named after that
With wbB.Worksheets(ws.Name)
'Loop from C2 to the last data in C, assuming C1 is a title
For i = 2 To lastRow
'Range.Find returns a range with the key, and offset from C to G, which is 4 columns right.
'May get a failure due to mismatching
If .Range("C:C").Find(ws.Range("C" & i).Value).Offset(0, 4) = 0 Then
ws.Range("H" & i).Value = 0
Else
ws.Range("H" & i).Value = 1
End If
Next i
End With
Next ws
Application.ScreenUpdating = True
End Sub