匹配匹配名称旁边的表1和表2中的名称和副本

时间:2011-10-25 20:24:34

标签: excel excel-vba copy match vba

我有一张Excel表格,其中A列中的名称和表格B的B列中的金额。

我有另一张sheet2,其名称在A中,就像在表1中一样,B列是空白的。

如何检查工作表1要检查工作表2的名称如果匹配,则在工作表1上的该名称旁边取一个名称,然后将金额复制到名称旁边的工作表2上匹配名称旁边的单元格中? sheet1上的名称每天都会更改。

我已经尝试了这一点而一无所获。

Sub Macro1()
'
' Macro1 Macro
'
    Dim RowIndex As Integer 
    Sheets("Sheet1").Select
    RowIndex = Cells.Row
    While DoOne(RowIndex)
        RowIndex = RowIndex + 3
    Wend
End Sub


Function DoOne(RowIndex As Integer) As Boolean
    Dim Key
    Dim Target
    Dim Success
    Success = False
    If Not IsEmpty(Cells(RowIndex, 1).Value) Then
        Key = Cells(RowIndex, 1).Value

        Sheets("sheet2").Select

        Set Target = Columns(2).Find(Key, LookIn:=xlValues)

        If Not Target Is Nothing Then
            Rows(Target.Row).Select
            Selection.Copy
            Sheets("Sheet1").Select
            Rows(RowIndex + 1).Select
            Selection.Insert Shift:=xlDown
            Rows(RowIndex + 2).Select
            Application.CutCopyMode = False
            Success = True
        End If

    End If
    DoOne = Success
End Function

表1:

A                                    B

A One Preservation            $16.00 

A&D Recovery, Inc.            $8,108.46 

A&S Field Services, Inc.      $4,941.56 

A&T Jax Inc                   $1,842.48 

表2:

A                                        B - blank cell

A One Preservation - Calvin & Renee 

A&D Recovery, Inc. - Drew & Adam    

A&S Field Services, Inc. - Aaron    

A&T Jax Inc - Tyson

2 个答案:

答案 0 :(得分:1)

此代码使用索引/匹配解决方案从sheet2中的sheet1复制匹配的B值。代码将使用可变图纸名称

  1. 空白单元格被忽略
  2. 第二张纸上的不匹配标记为“不匹配”。
  3. 该代码通过仅使用值更新

    来删除第二张纸上B列的公式

    更新:如果您的第二个工作表名称与sheet1相同,但右侧有“-some text”,则使用此更新的代码部分

     With rng1.Offset(0, 1)
        .FormulaR1C1 = "=IF(RC[-1]<>"""",IF(NOT(ISERROR(MATCH(LEFT(RC[-1],FIND("" -"",RC[-1])-1),'" & ws1.Name & "'!C[-1],0))),INDEX('" & ws1.Name & "'!C,MATCH(LEFT(RC[-1],FIND("" -"",RC[-1])-1),'" & ws1.Name & "'!C[-1],0)),""no match""),"""")"
        .Value = .Value
    End With
    

    原始

     Sub QuickUpdate()
        Dim ws1 As Worksheet
        Dim ws2 As Worksheet
        Dim rng1 As Range
        Set ws1 = Sheets(1)
        Set ws2 = Sheets(2)
        Set rng1 = ws2.Range(ws2.[a1], ws2.Cells(Rows.Count, "A").End(xlUp))
        With rng1.Offset(0, 1)
            .FormulaR1C1 = "=IF(RC[-1]<>"""",IF(NOT(ISNA(MATCH(RC[-1],'" & ws1.Name & "'!C[-1],0))),INDEX('" & ws1.Name & "'!C,MATCH(RC[-1],'" & ws1.Name & "'!C[-1],0)),""no match""),"""")"
            .Value = .Value
        End With
    End Sub
    

答案 1 :(得分:0)

为什么不使用VLOOKUP功能?

Sheet1在A列中有您的名字,在B栏中有您的名字。 Sheet2在列A中有您的查找名称,在列B中,您放置:

=VLOOKUP(A1,Sheet1!$A$1:$B$n,2,FALSE)

其中'n'是Sheet1表中的行数。

唯一的问题是,如果在Sheet1中找不到名称,它会放一个#N / A.可能有一种方法可以使用条件输入备用条目。