我有一张供应商联系信息表,其组织方式如下:
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