返回值,基于行和列的交集的值

时间:2015-08-17 14:47:31

标签: excel array-formulas

我想根据行和列的交集返回一个标签,等于"是"。

            |       Location       |    
ID | Tool   | Wall | Bin | Toolbox | Count   
---+--------+------+-----+---------+-------
1. | Axe    | YES  |     |         | 1  
2. | Hammer |      |     | YES     | 5      
3. | Pliers |      |     | YES     | 2      
4. | Nails  |      | YES |         | 500        
5. | Hoe    | YES  |     |         | 2  
6. | Screws |      | YES |         | 200    
7. | Saw    | YES  |     |         | 3

Toolbox中的内容是什么? (想要的结果)

Axe,Wall, 1 
Hammer, Toolbox, 5
Pliers,Toolbox, 2
Nails,Bin, 500
Hoe, Wall, 2
Screws, Bin, 200
Saw, Wall, 3

我还希望能够添加工具和位置?

1 个答案:

答案 0 :(得分:1)

如果不使用VBA,这将会有点痛苦,但如果您不介意帮助列,则可行。我不建议尝试在单个数组公式中执行此操作,因为文本字符串很难在数组公式中使用。也就是说 - 如果你有一个数组,你可以通过很多方式将它转换为单个结果(MIN,MAX,AVERAGE,SUM等)。但是对于一系列字符串,它更难以使用。特别是,没有简单的方法来连接字符串数组。

相反,请使用辅助列。假设列A =工具名,列B =检查是否在墙上,列C =检查是否在箱中,列D在工具箱中,列E是可用数。

格式化注释

首先,我会说我建议您使用TRUE / FALSE而不是“yes”/“no”。这是因为在Excel公式中使用TRUE / FALSE更容易。例如,如果你想在A3 =“是”时添加A1 + A2,你可以这样做:

=IF(A3="yes",A1+A2)

但是如果你想检查A3 = TRUE,这是简化的:

=IF(A3,A1+A2)

在这里,我们不需要硬编码“是”,因为A3本身将为TRUE或FALSE。如果A3>还要考虑是否要将单元格设为“是”。 5,否则为“否”。你可以这样做:

=IF(A3>5,"yes","no)

或者,如果你使用TRUE / FALSE,你可以简单地使用:

=A3>5

但是,我会假设您保留了当前的格式(我还建议你只有一个单元格,上面写着“toolbox”/“bin”等,而不是4列,其中1表示“是” “,但我们也会认为这需要这样。”

回到您的问题

将其放在F列中,在F2中放入第一个单元格:

=Concatenate(A2," ",INDEX($B$1:$D$1,MATCH("yes",B2:D2,0))," ",E2)

Concatenate将文本字符串组合成一个新的单个文本字符串。你也可以使用&amp ;;喜欢:A2& “”等,但有了这么多术语,这可能更容易阅读。索引查看标题行1,并返回第一列中与当前行中“是”匹配的项目。

然后将以下内容放入F3并向下拖动:

=Concatenate(F2," ", A2," ",INDEX($B$1:$D$1,MATCH("yes",B2:D2,0))," ",E2)

这会在上面的行和当前行之间放置一个空格。如果您希望在换行后显示每一行,请使用:

=Concatenate(F2,CHAR(10), A2," ",INDEX($B$1:$D$1,MATCH("yes",B2:D2,0))," ",E2)