Excel中的矩阵公式可计算指定范围内的连续出现次数

时间:2019-03-20 15:50:03

标签: excel excel-formula

我对矩阵公式有点了解,但是找不到解决方法。您能帮我提供解决这个问题的公式吗? 在下表中,用户输入“从”和“到”的值。 以下是数据。是否存在将结果中的值引发的公式? 计算结果的步骤

  1. 转到具有to值的列(在此示例中为6)
  2. 转到数据的第一行。
  3. 查找小于6的值(在第一行中为橙色)
  4. 计算连续发生的次数,从6到4(橙色,橙色,苹果)
  5. 返回2

    From    4   To  6           

1         2         3       4       5       6       7       8   Result

Apple   Orange  Mango   Apple   Orange  Orange  Lemon   Lemon   2

Mango   Apple   Lemon   Lemon   Lemon   Lemon   Lemon   Mango   3

Mango   Apple   Lemon   Lemon   Orange  Lemon   Lemon   Mango   1

非常感谢您对本指南的关注。

1 个答案:

答案 0 :(得分:0)

这是一个非常棘手的问题,但是:

enter image description here

{=COUNTA(INDIRECT(ADDRESS(ROW(),$B$1,4)&":"&ADDRESS(ROW(),$D$1,4)))-IFERROR(MAX(IF(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4))<>INDIRECT(ADDRESS(CELL("row",A4),$D$1,4)),COLUMN(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4)))-MIN(COLUMN(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4))))+1)),0)}

请注意,这是一个数组公式,应通过以下方式输入: Ctrl Shift Enter

细分类(在此示例中,我们将使用单元格I4

公式的第一位: {=COUNTA(INDIRECT(ADDRESS(ROW(),$B$1,4)&":"&ADDRESS(ROW(),$D$1,4)))-

  • ROW()用于返回当前单元格的行,例如:Row()将返回值4
  • ADDRESS()用于返回单元格的地址,例如:ADDRESS(ROW(),$B$1,4)将返回相对地址; D4ADDRESS(ROW(),$D$1,4)的相同逻辑将返回F4
  • INDIRECT()然后用于将两个地址合并到一个可行的范围内。
  • COUNTA()用于计算该特定范围内的参数,在我们的示例中,它将返回3

公式的第二位: IFERROR(MAX(IF(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4))<>INDIRECT(ADDRESS(CELL("row",A4),$D$1,4)),COLUMN(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4)))-MIN(COLUMN(INDIRECT(ADDRESS(CELL("row",A4),$B$1,4)&":"&ADDRESS(CELL("row",A4),$D$1,4))))+1)),0)}

  • 由于某些原因,ROW()在提取/比较数据时无法与INDIRECT()配合使用,因此请注意使用CELL(),在这种情况下它将替换ROW(),但将返回相同的值!
  • ADDRESS()再次用于以与上述相同的方式将两个范围拼凑在一起。
  • INDIRECT()再次用于处理该范围内的值。
  • IF()用于检查我们在该范围内的值是否不同,请注意<>与我们在列6中的值(在单元格D1中选择的值)相比。
  • 在这种情况下,因为它是一个数组公式,所以结果看起来像{TRUE,FALSE,FALSE}。对于实际上是TRUE的情况,它将转到我们TRUE的{​​{1}}语句。
  • 在此语句中,我们想知道IF()减去COLUMN()列,它是如此之小,它将在MIN()中返回({4,5,6}-{4,5,6})+1的结果
  • 针对较早的{1,2,3}或更确切地说{TRUE,FALSE,FALSE}的最后一个结果将是{1,0,0},显然,其中的{1,FALSE,FALSE}将是MAX()
  • 1将返回IFERROR(),如果以上语句返回错误(当值不等于searchvalue时)。
  • 例如,它将产生0

为了更好地理解,您应该在单元格3-1=2和单元格B1中向上更改值,并使用评估来查看正在发生的事情!