Сопоставьте имя и скопируйте с листа 1 на лист 2 рядом с соответствующим именем - PullRequest
0 голосов
/ 26 октября 2011

У меня есть лист Excel с именами в столбце A и суммой в столбце B для листа 1.

У меня есть еще один лист, это sheet2 с именами в A, как на листе 1, а столбец B пуст.

Как я могу проверить лист 1 Имя, чтобы проверить имя листа2? Если они совпадают, возьмите сумму рядом с этим именем на листе 1 и скопируйте сумму в ячейку рядом с соответствующим именем на листе 2 рядом с именем? Имена на листе 1 меняются ежедневно.

Я попробовал это и ничего не получил.

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 ]

1 голос
/ 26 октября 2011

Этот код использует решение Index / Match для копирования совпадающих значений B из sheet1 из sheet2. Код будет работать с именами переменных листов

  1. пустые ячейки игнорируются
  2. Несоответствия на втором листе помечаются как «нет совпадений».
  3. Код удаляет формулы из столбца B на втором листе, обновляя только значения

    Обновление : если имена вторых листов совпадают с именами sheet1, но справа есть "-некоторый текст", используйте эту обновленную часть кода

     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
    
0 голосов
/ 26 октября 2011

Почему бы не использовать функцию VLOOKUP?

Sheet1 содержит ваши имена в столбце A и значения в столбце B. Sheet2 содержит ваши имена поиска в столбце A, а в столбец B вы вводите:

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

Где 'n' - количество строк в таблице Sheet1.

Единственная проблема, связанная с этим, заключается в том, что он вставит # N / A, если не может найти имя в Sheet1.,Вероятно, есть способ добавить альтернативную запись, используя условное выражение.

...