Excel公式,当多行匹配时,如果A列与C列匹配,则从B列提取数据

时间:2018-11-09 13:34:20

标签: excel-formula

我需要一些公式帮助,以便将数据从Excel中的一张工作表中提取到另一张工作表中的数据库中。

原始数据:

1

最终数据库:

2

从图像中可以看到,我要搜索的数据列表到处都是。

我想将其拉入最终数据库,但我的公式并未考虑到存在多行包含我要搜索的值的事实。并非所有列表都具有所有相关信息,因此它们之间的行也不是恒定的。

我尝试了VLOOKUP,MATCH,IF等,并且图像中的公式是使它起作用的最接近的公式。

我可以手动完成此操作,但是如果有一个简化我的生活的公式,我将非常感激。

2 个答案:

答案 0 :(得分:1)

以下方法假设以下情况

  • 所有组中至少包含名称
  • 没有其标题名称的单元格(任何没有标题的单元格 将被忽略。)

在标题名称之前插入一列(将创建一个新列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表示该标头没有数据。

答案 1 :(得分:0)

带有一些代码的替代方法。

查看工作表2的A列中的值,然后将其粘贴到工作表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