Excel 多表查找,你能找到更优雅的解决方案吗?

Excel 多表查找,你能找到更优雅的解决方案吗?

这部分是为了好玩,我希望它不会因为主观性而被关闭,因为虽然“哪种解决方案最优雅”是主观的,但“当前的解决方案是复杂和丑陋的”却是显而易见的。

无论如何,我在 sheet1 中有一个列表,如下所示:

*Thing*            *type of thing*
Apple
Orange
Larceny
Cake
Banana
Murder

在 Sheet 2 中如下:

              fruit    confectionary      crime
Apple           x                                
Orange          x                                
Larceny                                     x    
Cake                         x                   
Banana          x                                
Murder                                      x   

我想要像这样返回 Sheet 1 中的 col B

*Thing*               *type of thing*                                   
Apple                 fruit                        
Orange                fruit                        
Larceny               crime                        
Cake                  confectinary               
Banana                fruit                        
Murder                crime                        

我将发布我当前的解决方案作为答案。它有效,我会给它这个...

您将如何解决这个问题?

答案1

这是我的解决方案。Index+match 可用于双向查找表中的值。这会调整正常解决方案,以便找到 x 并返回列标题。

=INDEX($E$1:$G$1,MATCH("x",OFFSET($E$1:$G$1,MATCH(A2,$D$2:$D$7,0),),0))

在此处输入图片描述

我把所有内容放在一张纸上,这样更容易看到,也使函数更短一些。

根据 Barry 在下面的评论,更好的选择是避免使用另一个索引函数进行偏移,以使其不至于不稳定。

=INDEX($E$1:$G$1,MATCH("x",INDEX($E$2:$G$7,MATCH(A2,$D$2:$D$7,0),0),0))

答案2

对于我当前的解决方案

=MATCH(A1,Sheet1!A1:A10,0)

在 B 列中,返回 Sheet2 中包含该内容的行。到目前为止一切顺利。但为了返回 Sheet2 中该行中 x 的位置并给出正确的单词,我使用了这个怪异的方法,在间接函数中使用 R1C1 引用连接字符串将行号转换为我可以实际使用的引用:

=IF(INDIRECT("sheet2!R"&B1&"C2",0)="X","fruit",IF(INDIRECT("sheet2!R"&B1&"C3",0)="X","confectionary",IF(INDIRECT("sheet2!R"&B1&"C4",0)="X","crime","ERROR")))

然后,该字符串计算结果为“sheet2R[rownumber]C[column]”,并将其输入到间接引用(转换为正常引用),然后转到 if 语句,将 x 的存在转换为相关单词

答案3

这是我喜欢的解决方案,与 gtwebb 的概念类似(并假设您的数据与他的屏幕截图中一致),但它不使用OFFSET(我认为只有在没有其他选择时才应该使用,因为它是易挥发的)。

=INDEX($E$1:$G$1,MATCH("x",$E2:$G2,0))

相关内容