在不同的列中使用数字和文本混合来提取人物

Extract people using numbers mixed with text over different columns

对于sheet/table:

+--------+-------------+------------+----------------+
| Person |    Diag1    |   Diag2    |     Diag3      |
+--------+-------------+------------+----------------+
| A      | 431 - TB    | 652 - PLA  |                |
| B      | 614 - Cough | 884 - Cold | 952 - Headache |
| C      | 747 - BLA   | 949 - POP  |                |
+--------+-------------+------------+----------------+

我有一个查找列:

+------+
| Diag |
+------+
|  431 |
|  650 |
|  949 |
|  555 |
|  484 |
+------+

对于每个人,如果 Diag 查找列中的任何数字位于 Diag1、Diag2 或 Diag 3 的任何列中,则该人将从原始 table 中选择,所有相关列仅包含数字在他们中。

在这种情况下,示例输出:

+--------+-------+-------+-------+
| Person | Diag1 | Diag2 | Diag3 |
+--------+-------+-------+-------+
| A      |   431 |   652 |       |
| C      |   747 |   949 |       |
+--------+-------+-------+-------+

这可以通过公式来完成,尽管这些公式看起来并不是最漂亮的。使用您的示例数据,假设您有这样的设置:您的原始 table 在列 A:D 中,您的查找列 "Diag" 在列 F 中,您的结果在列 H:K

在单元格 H2 中向下复制的是这个 array 公式。请注意,数组公式必须使用 CtrlShiftEnter 确认,而不仅仅是 Enter 。您会知道它已正确完成,因为在公式栏中您会看到它被大括号 {} 包围。不要尝试手动放入花括号。

=IFERROR(INDEX(A:A,SMALL(IF(ISNUMBER(FIND($F:$F,$B:$D)),ROW($B:$D)),ROW(H1))),"")

在单元格 I2 中上下复制的是这个常规公式(不需要数组条目):

=IF(H2="","",IF(VLOOKUP($H2,$A:$D,MATCH(I,$A:$D,0),FALSE)="","",--TRIM(LEFT(SUBSTITUTE(VLOOKUP($H2,$A:$D,MATCH(I,$A:$D,0),FALSE),"-",REPT(" ",999)),999))))