在不同的列中使用数字和文本混合来提取人物
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))))
对于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))))