Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在两个工作簿中找到匹配值,然后在满足条件时做标记_Excel_Vba - Fatal编程技术网

Excel 在两个工作簿中找到匹配值,然后在满足条件时做标记

Excel 在两个工作簿中找到匹配值,然后在满足条件时做标记,excel,vba,Excel,Vba,我不确定这是否可行,但这就是我想做的: 我有两本不同的作业本 工作簿A中的每一行在C列中都包含一个值。 1.在工作簿B的C列中查找值(不仅仅是行号), 2.移到同一行中的G列。 如果G列中的值为零,请返回工作簿a并在H列中输入0。 如果该值不是零,请在工作簿a的H列中输入1。 3.继续,直到没有更多有效行可供选择 在工作簿A(变量编号)中搜索 我有大约200个工作表要匹配(相同的工作表名称,不同的工作簿),所以我想确保VBA知道如何转到正确的工作表。我很乐意自己手动更改每个工作表的代码。这是通过

我不确定这是否可行,但这就是我想做的: 我有两本不同的作业本

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

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

我基本上对VBA一无所知,所以我甚至不知道从哪里开始。我想应该是一堆If语句


谢谢大家!

您需要的几种武器:

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

    Dim ws As Worksheets
    For Each ws In ThisWorkbook
        'do something
    Next ws
    
  • 您可以通过
    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
    

    谢谢你,newacc2240!到目前为止,它似乎工作正常,我所要做的就是将I改为14,并将列偏移5。