Формула Excel для извлечения данных из столбца B, если столбец A соответствует столбцу C, если несколько строк будут соответствовать - PullRequest
0 голосов
/ 09 ноября 2018

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

Исходные данные:

1

Конечная база данных:

2

Как видно из изображений, список данных, который я ищу, повсюду.

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

Я пробовал VLOOKUP, MATCH, IF и т. Д., И формула на изображении наиболее близка к тому, чтобы заставить ее работать.

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

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Альтернативный подход с некоторым кодом.

Посмотрите, какое значение есть в столбце A, лист 2, и копия вставьте его в лист 1.

Sub transposeData()

Dim Sht1 As Worksheet
Set Sht1 = ActiveWorkbook.Worksheets("Sheet1") 'Name of worksheet 1
Dim Sht2 As Worksheet
Set Sht2 = ActiveWorkbook.Worksheets("Sheet2") 'Name of worksheet 2

Dim lrow1 As Long
Dim lrow2 As Long
Dim i As Long

lrow2 = Sht2.Cells(Rows.Count, 1).End(xlUp).Row 'Find last row for sheet 2, Column A

For i = 1 To lrow2 'Loop from 1st row to last row in sheet 1
lrow1 = Sht1.Cells(Rows.Count, 1).End(xlUp).Row + 1 'Find last row in sheet 1
    Select Case Sht2.Cells(i, 1).Value 'Check the current value in Sheet 2, Column A
        Case Is = "Name" 'If the value is "Name" then copy to sheet 1, Column A
            Sht1.Cells(lrow1, 1).Value = Sht2.Cells(i, 2).Value
        Case Is = "Number" 'If the value is "Number" then copy to sheet 1, Column C
            Sht1.Cells(lrow1, 2).Offset(-1, 0).Value = Sht2.Cells(i, 2).Value
        Case Is = "Address" 'If the value is "Address" then copy to sheet 1, Column D
            Sht1.Cells(lrow1, 3).Offset(-1, 0).Value = Sht2.Cells(i, 2).Value
        Case Is = "Email" 'If the value is "Email" then copy to sheet 1, Column B
            Sht1.Cells(lrow1, 4).Offset(-1, 0).Value = Sht2.Cells(i, 2).Value
        Case Is = "Website" 'If the value is "Website" then copy to sheet 1, Column E
            Sht1.Cells(lrow1, 5).Offset(-1, 0).Value = Sht2.Cells(i, 2).Value
    End Select
Next i
End Sub
0 голосов
/ 09 ноября 2018

Приведенный ниже метод предполагает следующее

  • Все группы содержат как минимум Имя
  • Нет ячейки без имени заголовка (любая ячейка без заголовка будет игнорироваться).

Вставить столбец перед именами заголовков (будет создан новый столбец A)

Включить следующую формулу в A2

=IF(B2="Name",A1+1,A1)
Insert 0 in A1 

Перетащите формулу до конца диапазона

enter image description here

Теперь создайте таблицу со всеми вашими заголовками и вставьте формулу в первую ячейку этой таблицы, формула является формулой массива и должна быть введена с помощью Ctrl + Shift + Enter

enter image description here

=INDEX($C$2:$C$18,MATCH(1,IF(($A$2:$A$18=$E2)*($B$2:$B$18=F$1),0)))

Вы должны изменить ссылки на ячейки в соответствии с вашими данными

NA означает, что для этого заголовка нет данных.

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