如何识别一行中连续标记的两个单独范围的单元格

时间:2016-05-09 20:11:18

标签: excel excel-formula

鉴于以下所有广泛的示例表,我们将如何识别:

  1. 列H或上面的日期为第一组带x的连续单元格的最后一个单元格。
  2. 上面的列M或日期是第二组连续x的第一个单元格。
  3. +---+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
    |   |    A     |    B     |    C     |    D     |    E     |    F     |    G     |    H     |    I     |    J     |    K     |    L     |    M     |    N     |    O     |    P     |
    +---+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
    | 1 | 14/01/01 | 14/01/02 | 14/01/03 | 14/01/04 | 14/01/05 | 14/01/06 | 14/01/07 | 14/01/08 | 14/01/09 | 14/01/10 | 14/01/11 | 14/01/12 | 14/01/13 | 14/01/14 | 14/01/15 | 14/01/16 |
    | 2 |          |          |          | x        | x        | x        | x        | x        |          |          |          |          | x        | x        | x        |          |
    +---+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
    

    块之间的差距最大为356.由于拼写错误,注释中的316数量是错误的。

    使用中的公式:

    首先识别整体x:

    =MATCH("x",$A2:$P2,0)
    

    确定最后整体x:

    =MATCH("x",$A2:$P2,1)
    

    限制:

    没有VBA,只有excel公式。
    没有辅助细胞 无法将x更改为其他标识符 第一个块结束的一个单元格公式 用于开始第二个块的一个单元格公式。

    当我为两个组使用两个不同的标识符时很容易,但使用相同的标识符我只能想出如何识别第一个和最后一个X.我无法弄清楚如何识别它们之间的差距。我个人认为不可能,但我看到在这里回答问题的人做了一些非凡的事情。如果您认为不可能,请说出来。

2 个答案:

答案 0 :(得分:2)

这些似乎在我向他们投掷的测试中存活下来。

在B4:B5中作为CSE数组的公式。

=INDEX(INDEX(1:1, 0, MATCH("X", 2:2, 0)):INDEX(1:1, 0, MATCH(1E+99, 1:1)), 0, MATCH(TRUE, NOT(LEN(INDEX(2:2, 0, MATCH("X", 2:2, 0)):INDEX(2:2, 0, MATCH(1E+99, 1:1)))), 0)-1)
=INDEX(INDEX(1:1, 0, MATCH(TRUE, NOT(LEN(INDEX(2:2, 0, MATCH("X", 2:2, 0)):INDEX(2:2, 0, MATCH(1E+99, 1:1)))), 0)+MATCH("X", 2:2, 0)-1):INDEX(2:2, 0, MATCH(1E+99, 1:1)), 0, MATCH("X", INDEX(2:2, 0, MATCH(TRUE, NOT(LEN(INDEX(2:2, 0, MATCH("X", 2:2, 0)):INDEX(2:2, 0, MATCH(1E+99, 1:1)))), 0)+MATCH("X", 2:2, 0)-1):INDEX(2:2, 0, MATCH(1E+99, 1:1)), 0))

这个想法是建立一个可用细胞的子范围。例如,您需要找到一个小于第一个X到最后一个日期的第一个空格的单元格。你会在寻找第一个空白,

INDEX(2:2, 0, MATCH("X",2:2, 0)):INDEX(2:2, 0, MATCH(1E+99,1:1 ))

在第一组之后从第一个空白中减去1,调整起始位置,然后得到最后一个X的列。

last_and first

我开始使用另一种方法,当第一个X在A2中时似乎有困难,但这些方法没有出现相同的错误。

¹数组公式需要用 Ctrl + Shift + Enter↵完成。如果输入正确,Excel将公式包装在大括号中(例如 {} )。您不要自己键入大括号。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas

答案 1 :(得分:2)

这是我的:

要查找任何组结束日期:

=INDEX($A$1:$P$1,AGGREGATE(15,6,(COLUMN($A$1:$P$1))/(($A$2:$P$2="x")*($B$2:$Q$2 = "")),COLUMN(A:A)))

如果列(A:A)是一个计数器,则解析为1或第一个。当它拖过它时会增加第二个结束日期然后是第三个结束日期,依此类推。

要获得第二个开始日期:

=INDEX($A$1:$P$1,AGGREGATE(15,6,(COLUMN($A$1:$P$1)+1)/(($A$2:$P$2="")*($B$2:$Q$2 = "x")),COLUMN(B:B)))

与上面的计数器相同。

分别搜索模式"","x""x",""作为开始日期和结束日期。

enter image description here

为了让它变得动态,那么:

=INDEX($A$1:INDEX(1:1,MATCH(1e99,1:1)),AGGREGATE(15,6,(COLUMN($A$1:INDEX(1:1,MATCH(1e99,1:1))))/(($A$2:INDEX(2:2,MATCH(1e99,1:1))="x")*($B$2:INDEX(2:2,MATCH(1e99,1:1)+1) = "")),COLUMN(A:A)))

=INDEX($A$1:INDEX(1:1,MATCH(1E+99,1:1)),AGGREGATE(15,6,(COLUMN($A$1:INDEX(1:1,MATCH(1E+99,1:1)))+1)/(($A$2:INDEX(2:2,MATCH(1E+99,1:1))="")*($B$2:INDEX(2:2,MATCH(1E+99,1:1)+1) = "x")),COLUMN(B:B)))

在阅读@ Jeeped的答案后,这可能是他开始的方法。因为他是正确的,所以A中需要一个空白列,否则它将失败。