Excel:从表格中获取水平数据,在不同的表中垂直组织,忽略空白

Excel:从表格中获取水平数据,在不同的表中垂直组织,忽略空白

我有一张供应商联系信息表,其组织方式如下:

vendorname | address | city | state | zip | phone | fax | contactperson | phone | email

...我想vendorname从另一张工作表上的下拉菜单中进行选择(处理该部分),然后在下面的单元格中填充该供应商的联系信息。

为了使它更棘手,我希望它忽略表中的任何空白列。例如,假设表中的条目没有传真号码。我不希望它在“电话”和“联系人”之间放置一个空单元格。

仅使用公式就能实现这一点吗?

答案1

您可能想要使用该VLOOKUP()函数。以下是示例:

=VLOOKUP($B$3, Table1,2,FALSE)

其中 $B$3 是带有下拉列表的单元格,Table1 是包含联系人数据的表格。当从下拉列表中选择一项时,将此公式放在要填写的第一个单元格中。在要填写的其他单元格中,您只需增加第三个参数(列索引参数;例如上例中的 2)。

据我所知,此方法无法跳过空白列。您可能需要 VBA 来实现这一点。

答案2

是的,只需用公式就可以实现:

查找标签(A 列):

=IFERROR(INDEX(Table1[#Headers],SMALL(IF(OFFSET(Table1[#Headers],MATCH($B$8,Table1[vendorname],0),0)="","",COLUMN(Table1[#Headers])),ROW()-ROW($A$7))),"")

  • MATCH($B$8,Table1[vendorname],0)查找包含所选联系人的行
  • OFFSET(Table1[#Headers],MATCH(...),0)获取选定行的地址
  • IF(OFFSET(...)="","",COLUMN(Table1[#Headers]))检查所选项目的哪些列包含数据(空列为空值,其他列为列号)
  • SMALL(IF(...),ROW()-ROW($A$7)选择下一列要使用
  • INDEX(Table1[#Headers],SMALL(...))获得称号
  • =IFERROR(INDEX(...),"")显示所有数据后显示空单元格

查找数据(B 列):

=IFERROR(INDEX(OFFSET(Table1[#Headers],MATCH($B$8,Table1[vendorname],0),0),SMALL(IF(OFFSET(Table1[#Headers],MATCH($B$8,Table1[vendorname],0),0)="","",COLUMN(Table1[#Headers])),ROW()-ROW($A$7))),"")

与前一个唯一的区别是的第一个参数INDEX(),它与OFFSET()在 small 中使用的公式相同,用于在选定行而不是标题中查找数据。

两个公式都是数组公式,所以需要通过++CTRL输入SHIFTENTER

在此处输入图片描述

相关内容