我正在寻找一个Excel公式或VBA解决方案,它可以根据Table1
中的数据和Table2
列N
中的输入生成Table2
列Party
中的结果。Table2
的列N
中的输入是与Table1
中的数据行的顺序相对应的数字。Table2
中的Party
应该从Table
返回ShortName
,但如果ShortName
为空,则Table2
中的Party
应该返回Name
。谢谢你的帮助。
表1
| 姓名|短名称|
| - -----|- -----|
| 乔恩·多伊|多伊|
| 罗伯特·史密斯||
| 苏珊·米勒|SM|
| 唐老鸭||
| 米老鼠|老鼠|
| Kog Enterprises,Inc.|科格|
| 机械公司||
表2
| N|派对|
| - -----|- -----|
| 一二三|Doe,Robert Smith,SM|
| 4|唐老鸭|
| 三五六|SM,老鼠,Kog|
| 二三五六七|Robert Smith,SM,The Mouse,Kog,Mechanical,Inc.|
下面的公式有效,但仅适用于ShortName
;它不检查ShortName
,如果为空,则默认为Name
:
=TEXTJOIN(",",TRUE,
INDEX(FILTER(Table1[ShortName],Table1[ShortName]<>""),
MATCH(NUMBERVALUE(TEXTSPLIT([@N2],,",",TRUE,1)),
ROW(Table1[ShortName])-ROW(Table1[[#Headers],[ShortName]]),
0)))
下面的公式可以在Name
和ShortName
之间正确切换,但不能处理Table2
列N
中的多个逗号分隔值:
IF(INDEX(FILTER(CHOOSE(IF(LOWER(LEFT([@N2],1))="-",1,2),Table3[[Name]:[ShortName]],Table1[[Name]:[ShortName]]),CHOOSE(IF(LOWER(LEFT([@N2],1))="-",1,2),Table3[Name],Table1[Name])<>""),SUBSTITUTE(LOWER([@N2]),"-",""),3)=0,INDEX(FILTER(CHOOSE(IF(LOWER(LEFT([@N2],1))="-",1,2),Table3[[Name]:[ShortName]],Table1[[Name]:[ShortName]]),CHOOSE(IF(LOWER(LEFT([@N2],1))="-",1,2),Table3[Name],Table1[Name])<>""),SUBSTITUTE(LOWER([@N2]),"-",""),1),INDEX(FILTER(CHOOSE(IF(LOWER(LEFT([@N2],1))="-",1,2),Table3[[Name]:[ShortName]],Table1[[Name]:[ShortName]]),CHOOSE(IF(LOWER(LEFT([@N2],1))="-",1,2),Table3[Name],Table1[Name])<>""),SUBSTITUTE(LOWER([@N2]),"-",""),3))
上面的公式还有其他没有在这里讨论的特性,以帮助保持这篇文章尽可能简单。
3条答案
按热度按时间u7up0aaq1#
使用
ARRAYTOTEXT()
和XLOOKUP()
的另一种替代方案·单元格
E2
中使用的公式**注意:**由于您在帖子中提到您有
Table1
和Table2
,因此溢出数组公式不适用于Structured References
,因此需要填写上述公式,否则它会因Table Structured
行为而自动填写。to94eoyn2#
假设您的标签没有版本限制,下面的代码似乎会产生您所描述的内容:
填写
或仅在F2中输入单个公式:
您也可以通过在
Table
中设置输出来避免填充。通过在Party
列的第一行输入公式,公式将自动填充。ibrsph3r3#
按索引匹配数据