Сопоставление данных по столбцам и строкам с использованием VBA - PullRequest
0 голосов
/ 23 октября 2019

У меня есть два листа:

Лист 1 состоит из:

Sheet1

Лист 2 состоит из:

Sheet2

И вывод должен отображаться в столбце M на листе 1. Я прилагаю пример выходных данных здесь:

Sample Output

Итак, здесь у меня есть ID на листе 1, например, для: ID 'US' имеет Abhay, Carl и Dev и вSheet3, у меня есть имена в столбце и ID в строках. Что я хочу, так это чтобы мой выходной столбец Sample должен заполняться с использованием макроса на основе соответствующих значений из Sheet3

Я использую приведенную ниже логику, но что-то идет не так:

For i = 2 To 10
j = i + 1
If ThisWorkbook.Sheets("Input").Range("N" & i) = ThisWorkbook.Sheets("Sheet3").Range("A" & i) And ThisWorkbook.Sheets("Input").Range("K" & i) = ThisWorkbook.Sheets("Sheet3").Range("B1") Then
    ThisWorkbook.Sheets("Input").Range("O" & i) = ThisWorkbook.Sheets("Sheet3").Range("B" & j)
End If
Next i

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Есть несколько способов подойти к этому. Ниже приведен один из них:

ПРИМЕЧАНИЕ : для простоты я сохранил свои данные на одном листе. Вы можете изменить приведенные ниже формулы, поскольку ваши данные находятся на 2 листах. Сказав это, я использовал те же столбцы, что и в вашем запросе

Решение: Имеет "удерживающий столбец" . В моем примере я использовал столбец J в качестве удерживающего столбца (вы можете скрыть этот столбец, если хотите). В J2 введите следующую формулу: =IF(ISBLANK($K2), $J1,$K2). Скопируйте формулу для всех используемых строк. Затем скопируйте следующую формулу в M2: =VLOOKUP($L2,$A$3:$C$8,IF($J2="US",2,3),FALSE). Как и прежде, скопируйте формулу во все используемые строки. Это должно дать вам ваши результаты

0 голосов
/ 23 октября 2019

Поскольку вы запросили решение VBA, см. Приведенный ниже код.

Dim colLen As Integer
Dim i As Integer
Dim colPt As Integer
Dim rowPt As Integer

' Counts number of rows on Sheet 1, column B.
colLen = Sheets(1).Cells(Rows.Count, "B").End(xlUp).Row

' Loops through all names on Sheet 1.
For i = 2 To colLen
' Retain US or NA ID for blank cells.
    If Sheets(1).Cells(i, 1) <> "" Then
        If Sheets(1).Cells(i, 1) = "US" Then
            colPt = 2
        Else
            colPt = 3
        End If
    End If

' Find name on Sheet 2 and set row.
    rowPt = Sheets(2).Range("A:A").Find(Sheets(1).Cells(i, 2)).Row
' Add ID from Sheet 2 to Sheet 3
    Sheets(1).Cells(i, 3) = Sheets(2).Cells(rowPt, colPt)

Next i

Допущения:

  1. Лист 1 является основным листом, лист 2 содержит данные поиска.
  2. Все имена в данных поиска уникальны.

Я бы рекомендовал включать идентификатор в каждую строку вместо того, чтобы рассматривать его как заголовок, но это предпочтение. Существуют формульные решения, которые также подойдут для этого, если вы хотите пропустить VBA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...