使用与不同列上的文本混合的数字来提取人

时间:2016-04-26 15:39:06

标签: excel pivot-table excel-2016

对于工作表/表格:

+--------+-------------+------------+----------------+
| 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中的任何列中,则该人将从原始表中选择,其中所有关联列仅包含其中的数字。

在这种情况下,样本输出:

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

1 个答案:

答案 0 :(得分:1)

这可以用公式来完成,尽管这些公式并不是最漂亮的。使用您的示例数据,让我们说您有这样的设置:您的原始表位于A:D列,您的查阅列" Diag"在F列中,您的结果在H:K

列中

tigeravatar example for Amulya Sharma

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

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

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

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