Сопоставление данных между двумя листами и копирование в местоположение - PullRequest
0 голосов
/ 05 февраля 2020

Это сценарий:

  • две таблицы - Лист1 и Лист2
  • В Листе есть все, что есть в Листе 2 и более

Я ищу, чтобы найти точное соответствие в столбцах Листа 1 и В с данными в столбцах Листа 2 и В (расположение строки всегда будет отличаться от Листа1), а затем скопируйте содержимое столбца C из листа 1 в соответствующую строку в столбце Лист 2 C .

Я пробовал несколько Match утверждений. Я получаю все виды ошибок и даже не могу получить неправильный результат.

Лист1 является основной таблицей. Sheet2 - это подмножество данных из Sheet1 (результаты детализации сводной таблицы. Идея состоит в том, чтобы просмотреть каждую строку, столбцы A и B на Sheet2 и найти совпадения в Cols A и B на Sheet1. Затем скопируйте значение из той же строки в столбце C в соответствующую строку в Листе 2.

Это была одна попытка:

Sub match_1() 
    Sheets("Sheet2").Range("A2:B2").Value = WorksheetFunction.Match( _
        Sheets("Sheet1").Range("A2").Value, _
        Sheets("Sheet1").Range("A:B"), _
        0) 
End Sub

Лист1:
This is sheet1

Лист2:
This is sheet2

1 Ответ

1 голос
/ 05 февраля 2020

Существует три проблемы с использованием функции Match :

  1. Match, ожидающей одну строку или столбец данных во втором аргументе. Вы передали ему 2 столбца, поэтому он будет всегда возвращать #N/A ошибку
  2. Match возвращает номер элемента в строке / столбце, который соответствует Первый аргумент. Затем вам нужно использовать Index или Range или Cell, чтобы получить значение.
  3. Match не не соответствует нескольким столбцам. Я объясняю здесь , как сделать это совпадение без VBA

. Используя мой пример из пункта 3, вот код для достижения вашей цели:

Sub matchValues()
    Dim calculation As XlCalculation, screenUpdating As Boolean
    calculation = Application.calculation: Application.calculation = xlCalculationManual
    screenUpdating = Application.screenUpdating: Application.screenUpdating = False

    Dim rCaseLink As Range

    With Worksheets("Sheet2")
        Set rCaseLink = .Range(.Cells(2, 3), .Cells(.Rows.Count, 2).End(xlUp).Offset(0, 1))
    End With

    With rCaseLink
        'This formula will pull back the Value for Column C based on A and B
        .Formula = "=INDEX(Sheet1!$C$2:$C$999, AGGREGATE(15, 6, ROW(Sheet1!$A$2:$A$999)/(--(Sheet1!$A$2:$A$999=$A2)*--(Sheet1!$B$2:$B$999=$B2)), 1)-1, 1)"
        .Calculate
        .Value = .Value 'This will flatten the value, so that it is no longer a formula
    End With

    'Reset Excel
    Application.calculation = calculation
    Application.screenUpdating = screenUpdating
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...