【问题标题】:How to convert address match formulas into dynamic ranges?如何将地址匹配公式转换为动态范围?
【发布时间】:2015-01-15 01:36:17
【问题描述】:

我正在尝试开发一个公式,该公式根据两个单元格的地址动态设置的范围对列中的单元格求和,其中特定文本会根据两个单元格之间的行数而改变地址。

示例:工作表red_fruit

    |        A                        |        B   |      C
 1  |       Fruit store               |            |      
 2  |                                 |   apples   |      5
 3  |                                 |   apples   |      5
 4  |                                 |   oranges  |      1
 5  |  Fruit store branches (text)    |            |

在名为“summary”的第二张工作表中,使用工作表“red_fruit”中的数据,我想根据从“水果店”行到“水果店分店”行的范围设置在 C 列中添加苹果的数量,并且忽略橙子的数量。

但是,我不想使用绝对单元格地址(A1、B2 等),因为我知道“水果店”和“水果店分店”之间的列在以后的工作表中会发生变化。

我还需要将 C 值限制在“水果店分支”的深度,因为我知道将来该行之后会有更多数据。

过去我可以通过以下公式做到这一点:

=SUMIF( 'red_fruit'!$B$1:B, "apples*", 'red_fruit'!$C$1:C )

但这仅适用于 B 列的绝对值,并且对于 B 列和 C 列都没有动态限制。

所以现在我需要想办法用动态公式替换 B 值,如果我在“水果店”和“水果店分支”之间添加更多行,该公式会自动调整。

我能够使用以下公式动态获取 B 列的地址:

对于“水果店”行:

=ADDRESS((MATCH("fruit store",A1:A,1)),2,4)

结果是B1

对于“水果店分店”行:

=ADDRESS((MATCH("fruit store branches",A1:A,1)),2,4)

结果是B5

这就是我卡住的地方。我一直无法混合公式来创建动态范围。最好的我能想出以下公式,但它返回一个错误:

=SUMIF( indirect"&(ADDRESS((MATCH("fruit store",A1:A,1)),2,4):"&(ADDRESS((MATCH("fruit store branches",A1:A,1)),2,4) , "apples*", c1:c ))

我正在寻找的内容如下所示:

=SUMIF( 'red_fruit'!dynamic_cell_address_formula1:'red_fruit'!dynamic_cell_address_formula2 , "apples", 'red_fruit'!$C$1:C )

【问题讨论】:

  • 你喜欢这些动态范围,不是吗?
  • 是不是我喜欢动态范围。我需要使用它们才能通过添加数据来获得特定的结果。我的 excel 标签不好。我删了。

标签: google-sheets sum google-sheets-formula


【解决方案1】:

=sum(filter(red_fruit!C:C,row(red_fruit!C:C)<MATCH("fruit store branches",red_fruit!A1:A,1),red_fruit!B:B="apples"))

【讨论】:

  • 没用。我有一个#REF!错误。另外我认为公式不仅应该由“水果店分支”之前的行来定义,还应该由“水果店”之后的行来定义,因为我将多次将相同的公式应用于数据的不同部分在工作表中。所以会有一个部分由“fruit store”定义:“fruit store branches”,另一个部分由“juice bar”定义:“juice bar branches”。
  • 您是否尝试过调整公式以满足您的需求?您是否尝试过只使用 Filter() 部分,直到它返回您想要的行? SO 是一个帮助网站,而不是我们为你做的工作......
  • 是的,我确实调整了它,但仍然出现错误。不,我不是在找人来帮我解决这个问题,正如你从我自己对问题的回答中看到的那样,使用过渡表和 3 个公式来创建范围,然后是最终添加。
【解决方案2】:

我无法使用单个公式找到解决此问题的方法,但我能够使用过渡表中的 3 个公式解决该问题。

首先,我创建了一个名为“AppleData”的工作表。在 AppleData 的 B2 单元格中,我输入了以下公式:

=IFERROR(MATCH("Fruit Store",'red_fruit'!$A$1:$A,0), "")

这将为我提供从“水果店”到“水果店分店”范围的第一个坐标。如果没有数据,则 IFERROR 公式只会将单元格留空。

然后,在下面的单元格 B3 中,我输入了这个公式:

=IFERROR(MATCH("*Fruit Store Branches*",'red_fruit'!$A$1:$A,0)-1, B2)

同样,如果没有数据,则单元格将匹配单元格 B2,该单元格将为空白或具有有效坐标号。

接下来,在 B4 中,我添加了一个公式,该公式使用单元格 B2 和 B3 的内容来创建“Fruit Store”和“Frui Store Branches”之间的范围,查找“apples”,然后仅添加数量苹果条目:

=SUMIF( indirect("red_fruit!A"&AppleData!B2&":A"&AppleData!B3), "*apples*", indirect("red_fruit!C"&AppleData!B2&":C"&AppleData!B3) )

然后我为一年中的每个月创建了一个类似的系统,因为每个月我都会得到一个新的电子表格,其中包含不同的数据进行排序并插入汇总表。

所以现在我要做的就是转到汇总表并将“B4”单元格相加,从而解决为此场景创建动态范围的问题。

就个人而言,我更愿意在摘要表中使用单个公式,但由于这也有效并且它解决了相同的问题,所以我可以接受它。

感谢那些真诚地解决这个问题的人。

【讨论】:

  • 我忘了提及:此解决方案适用于 Google 电子表格,如果您将电子表格下载为 Excel 格式,它也可以正常工作。但是,如果您在 Open Office 4.1 中打开 .xlsx 文件,它将不起作用,因为 Open Office 4.1 它不处理 IFERROR 公式。不过,它可以在最新版本的 Libre Office 中运行。我还注意到,出于某种原因,Google 电子表格将 Excel 的 A open 值更改为 A1024。这可能会导致工作表出现问题,但可以通过在公式中找到从 A1024 到 A 的替换来解决。
【解决方案3】:

这就是你想要的 =)

=SUMIFS(
OFFSET(red_fruit!$A$1,
MATCH("Fruit Store",red_fruit!$A:$A,),2,
MATCH("Fruit store branches (text)",red_fruit!$A:$A,),1),
OFFSET(red_fruit!$A$1,MATCH("Fruit Store",red_fruit!$A:$A,),1,
MATCH("Fruit store branches (text)",red_fruit!$A:$A,),1),"apples")

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    相关资源
    最近更新 更多