【问题标题】:Index Match with multiple row and column criteria on google sheets与谷歌表格上的多个行和列条件的索引匹配
【发布时间】:2019-03-13 10:36:17
【问题描述】:

我有一个包含 3 张表格的电子表格:一张用于按月购买饮料,一张用于按月购买水果,还有一张我想在其中显示其他 2 张数据摘要的主表格。

我要做的是根据餐厅名称(Col A)、水果或饮料类型(Col B)和月份(第 2 行)在右侧单元格中显示数据。例如,如果 1 月 18 日餐厅 1 的果汁价格为 20 欧元,我希望主表在单元格 C6 中显示 20 欧元(请参见下面的电子表格)。我尝试过不同的索引匹配、sumifs 和数组公式,但都无法做到。

我曾尝试研究解决方案,但找不到适合我具体情况的任何解决方案。我希望有一个人可以帮助我!

您可以在此处找到共享电子表格,随意试用并根据需要进行编辑。

https://docs.google.com/spreadsheets/d/1O3PhzAg1qRPGGHBTlphCETEBDJg8sZrVW0rVmghbVCM/edit?usp=sharing

谢谢!

【问题讨论】:

    标签: excel indexing google-sheets match multiple-columns


    【解决方案1】:

    以下是针对饮料的建议:

    =index(Beverages!$C:$L,match($B4,index(Beverages!$B:$B,match(index($A:$A,match("zzz",$A$1:index($A:$A,row()),1)),Beverages!$A:$A,0)):Beverages!$B$100,0)+match(index($A:$A,match("zzz",$A$1:index($A:$A,row()),1)),Beverages!$A:$A,0)-1,match(C$2,Beverages!$C$2:$L$2,0))
    

    编辑

    这可以简化(不需要索引之一)

    =index(Beverages!$C:$L,match($B4,index(Beverages!$B:$B,match(index($A:$A,match("zzz",$A$1:$A4,1)),Beverages!$A:$A,0)):Beverages!$B$100,0)+match(index($A:$A,match("zzz",$A$1:$A4,1)),Beverages!$A:$A,0)-1,match(C$2,Beverages!$C$2:$L$2,0))
    

    说明

    (1) 查找您目前正在处理的餐厅:

    index($A:$A,match("zzz",$A$1:$A4,1))
    

    它只向下搜索到当前行,寻找它可以在 A 列中找到的最后一个非空白单元格。

    (2) 在 Beverages 表中找到这家餐厅开始的行:

    match(index($A:$A,match("zzz",$A$1:$A4,1)),Beverages!$A:$A,0)
    

    (3) 现在匹配饮料表中的饮料名称:

    match($B4,index(Beverages!$B:$B,match(index($A:$A,match("zzz",$A$1:$A4,1)),Beverages!$A:$A,0)):Beverages!$B$100,0)
    

    (4)但是你还是要把搜索的起始位置加回来(因为你不是从顶部开始的):

    match($B4,index(Beverages!$B:$B,match(index($A:$A,match("zzz",$A$1:$A4,1)),Beverages!$A:$A,0)):Beverages!$B$100,0)+match(index($A:$A,match("zzz",$A$1:$A4,1))
    

    整个事情在饮料表中给出了您想要的行。

    (5) 只需从第 2 行匹配对应的月份,就可以得到饮料表中的列:

    match(C$2,Beverages!$C$2:$L$2,0)
    

    (或者如果月份匹配,您可以将其拉过去)。

    所以关于饮料和水果的整个事情就是

    =iferror(index(Beverages!$C:$L,match($B4,index(Beverages!$B:$B,match(index($A:$A,match("zzz",$A$1:$A4,1)),Beverages!$A:$A,0)):Beverages!$B$100,0)+match(index($A:$A,match("zzz",$A$1:$A4,1)),Beverages!$A:$A,0)-1,match(C$2,Beverages!$C$2:$L$2,0))
    ,index(Fruit!$C:$L,match($B4,index(Fruit!$B:$B,match(index($A:$A,match("zzz",$A$1:$A4,1)),Fruit!$A:$A,0)):Fruit!$B$100,0)+match(index($A:$A,match("zzz",$A$1:$A4,1)),Fruit!$A:$A,0)-1,match(C$2,Fruit!$C$2:$L$2,0)))
    

    【讨论】:

    • 它给了我一个公式解析错误。你能不能试着解释一下你想做什么?公式有点混乱
    • 您的语言环境中的分隔符似乎是 ; (分号)而不是逗号。已在测试表的几个单元格中尝试过该公式 - 稍后将尝试添加一些解释。
    【解决方案2】:

    手动操作很容易。举个例子

    如果 1 月 18 日餐厅 1 的果汁价格为 20 欧元,我想要主表 在单元格 C6 中显示 20 欧元

    只需将=Beverages!C7放入C6。

    您可以手动为所有gen-18 执行此操作,然后使用自动填充将它们水平拖过剩余月份。enter code here

    【讨论】:

    • 感谢您的回答。我也考虑过这个解决方案,但效果不是很好,因为在我的实际工作表(不是我分享的这个示例)中,我不想将各种子类别包含在主工作表中
    • 好的,我知道这很简单,但也许可以多解释一下您需要什么,并提供一个您想要排除的类别的示例 - 如果尚未解决。
    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 2019-12-28
    • 2021-10-21
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多