如何识别一行中连续标记的单元格的两个单独范围
鉴于下面所有的广泛的示例表,如何确定:
- H列或上面的date作为第一组具有x的连续单元格的最后一个单元格。
- 上面的列M或date是第二组连续x的第一个单元。
+---+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+ | | 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.我无法弄清楚如何识别两者之间的差距。 我个人不认为这是可能的,但我看到在这里回答问题的人做了一些非凡的事情。 如果你不认为这是可能的,请说出来。
这些似乎能够在我向他们投掷的testing中幸存下来。
在B4:B5中作为CSEarray¹公式。
=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))
这个想法是build立一个可用的细胞的子范围。 例如,您需要查找一个单元格,比从第一个X到最后一个date的第一个空格。 你会在寻找第一个空白,
INDEX(2:2, 0, MATCH("X",2:2, 0)):INDEX(2:2, 0, MATCH(1E+99,1:1 ))
在第一组之后,从第一个空白中减去1,调整起始位置,并得到最后一个X的列。
我从另一种方法开始,当第一个X在A2时似乎有困难,但是这些方法没有出现相同的错误。
¹ 数组公式需要使用Ctrl + Shift + Enter 键来完成。 如果input正确,Excel将花括号包括在公式中(例如{和} )。 你不要自己input大括号。 一旦正确input第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。 尝试和减less您的全列引用范围更接近代表实际数据的范围。 数组公式将计算周期对数化,所以最好将参考范围缩小到最小。 有关更多信息,请参阅数组公式的示例 。
这是我的:
find任何组结束date:
=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)在哪里是一个计数器,这个解决scheme为1或第一个。 当它拖动它将增加获得第二个结束date,然后第三个等等。
要获得第二个开始date,那么:
=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)))
与上面的这个柜台一样。
这样search模式"","x"
和"x",""
分别作为开始date和结束date。
为了使其dynamic,那么:
=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中有一个空白的列,否则会失败。