我希望在我的鸟类研究中得到进一步的帮助。 每个人都非常有帮助,我正在采纳你们所有的建议,这确实帮助我解决了 6500 多个案例!
这是我的新困境:我想检查一个单元格(每种情况的诊断),看看它是否包含一系列项目(所有诊断)中的任何字符串,并且还标记为“Y”作为限定符(震惊,在此例如)对于范围内的该项目。
我已经尝试将
=IF(SUMPRODUCT(--ISNUMBER(SEARCH($B,D2:D4)))>0,"Y","N")
放入 $C 中,这已经让我成功了一半,但我需要第二个限定符,但我似乎无法自己完成。
在此示例中,B 列是搜索列,D 列是范围,E 列是范围的限定符,C 列是所需的输出。我更愿意这样做而无需将数据转换为表格。
案例 | 每种情况的诊断 | 期望的输出 | 所有诊断(范围) | 冲击(范围) |
---|---|---|---|---|
1 | 肺部休克;缺氧 | 是 | 震惊 | 是 |
2 | 震惊 | 是 | 肺部休克 | 是 |
3 | 肺部休克 | 是 | 缺氧 | N |
4 | N | |||
5 | 缺氧 | N |
这是您可以尝试的一种方法:
=IF(OR(IFERROR(SEARCH($D$2:$D$4,TEXTSPLIT(B2,"; ")),0)*($E$2:$E$4="Y")),"Y","N")
或者,如果您想返回整个数组,那么:
=MAP(B2:B6,LAMBDA(x,IF(OR(IFERROR(SEARCH(D2:D4,TEXTSPLIT(x,"; ")),0)*(E2:E4="Y")),"Y","N")))
可以使用
TEXT()
函数返回 Y
和 N
以及自定义格式,如上一个查询:
=TEXT(N(OR(IFERROR(SEARCH($D$2:$D$4,TEXTSPLIT(B2,"; ")),0)*($E$2:$E$4="Y"))),"[=1]\Y;\N")
此外,如果适用,可以利用 MS365 Office Insiders 中提供的新功能,
TRIMRANGE()
或其特性。
=LET(
_Search, DROP(B.:.B,1),
_Range, DROP(D.:.E,1),
MAP(_Search,LAMBDA(x,
IF(OR(IFERROR(SEARCH(TAKE(_Range,,1),TEXTSPLIT(x,"; ")),0)*
(DROP(_Range,,1)="Y")),"Y","N"))))
XMATCH
;
或 '
拆分每个诊断条目并查找SUM(--ISNUMBER(XMATCH(TRIM(TEXTSPLIT(d_e, {",",";"})), all_diag
> 0输入
C2
(并调整范围以匹配您的数据):
=LET(
all_diag, SORT(TOCOL(TRIM(D2:D100), 1)),
diag_for_each, B2:B100, qualified, E2:E100 = "Y",
includes_diag, MAP(diag_for_each, LAMBDA(d_e,
IF(ISBLANK(d_e), 0,
SUM(--ISNUMBER(XMATCH(TRIM(TEXTSPLIT(d_e, {",",";"})), all_diag, , 2)))))),
IFS(ISBLANK(diag_for_each), "", includes_diag * qualified, "Y", TRUE, "N")
)