我有一项任务,我花费的时间比我愿意承认的要长得多。我不经常在 excel 中工作,也很少做任何基本的编码。我真的需要一些帮助。
我需要做的是从 A 列中提取代码(子字符串)(使用我在 D 列中创建的代码列表)并将该代码返回到新单元格(B 列)。如果 D 列列表中 A 列的单元格中没有代码,理想情况下我希望它返回某种“DNE”作为标志。
但是现在从一些具有有效代码的源数据中,我得到的返回代码是 A 列中代码字的一部分。
我快要得到我想要的东西了,但在下面这个例子中遇到了特别的麻烦:
老实说,在我自己悲惨地失败之后,我开始搜索论坛并找到了我用来帮助我到达现在位置的这个片段。我花了几个小时寻找可以解决我的问题但没有成功的东西。我基本上是在 B 列中输入类似的内容并填写。
=IFERROR(INDEX($D$4:$D$10,MATCH(1,COUNTIF($A1,""&$D$4:$D$10&""),0)),"")
所以最大的问题之一是它返回的代码是源代码中其他单词或代码的一部分。因此,例如,第一行数据返回 CE(FCE 的一部分)而不是 CMRI。 (“FCE”不是代码,但“CE”是)。最后一行是跳过代码 FND 并返回 CONC 的一部分作为 CON
有关我要退回的内容,请参阅 C 栏。
我确定这是一个完全的 hack 工作所以我道歉,我不经常在 excel 中工作 - 很明显:D
再次,我非常感谢任何建议!
将
LOOKUP()
函数与FIND()
一起使用->对于多次出现,这将不起作用。事实上,任何查找功能都无法带来所需的输出,对于多次出现,请参考下面的解决方案。
• 单元格中使用的公式
B2
=IFERROR(LOOKUP(2,1/(FIND(" "&$D$2:$D$7&" "," "&A2&" ")),$D$2:$D$7),"DNE")
另一种方式:
• 单元格中使用的公式
B2
=LET(x,$D$2:$D$8,y,TEXTSPLIT(A2," "),
TOROW(FILTER(x,MMULT(N(y=x),SEQUENCE(COLUMNS(y),,,0)),"DNE")))
或者,
• 单元格中使用的公式
B2
=LET(x,$D$2:$D$8,
BYROW(A2:A5,LAMBDA(m,
TEXTJOIN("|",,FILTER(x,MMULT(N(TEXTSPLIT(m," ")=x),
SEQUENCE(COLUMNS(TEXTSPLIT(m," ")),,,0)),"DNE")))))
使用
XMATCH()
和TEXTSPLIT()
• 单元格中使用的公式
B2
=LET(x,TEXTSPLIT(A2,," "),
ARRAYTOTEXT(FILTER(x,ISNUMBER(XMATCH(x,$D$2:$D$8)),"DNE")))
如果你想要一个单一的公式,那么上面的公式可以像下面这样使用
BYROW()
• 单元格中使用的公式
B2
=LET(x,D2:D8,
BYROW(A2:A5,LAMBDA(m,LET(k,TEXTSPLIT(m,," "),
TEXTJOIN("|",,FILTER(k,ISNUMBER(XMATCH(k,x)),"DNE"))))))
或者,你可以使用这个
• 单元格中使用的公式
B2
=LET(x,$D$2:$D$8,TEXTJOIN(" | ",,FILTER(x,ISNUMBER(FIND(" "&x&" "," "&A2&" ")),"DNE")))
XMATCH
FILTER
和 TEXTJOIN
。=LET(srg,A2:A5,lrg,D2:D7,
BYROW(srg,LAMBDA(sr,
IFERROR(INDEX(lrg,TAKE(TOCOL(XMATCH(TEXTSPLIT(sr," "),lrg),3),1)),"DNE"))))