Excel公式 - 在单元格上方的行中首次出现部分字符串

时间:2018-01-11 15:17:36

标签: excel excel-formula

我在Excel 2013中有一张水果表。

enter image description here

我想填写“类别”列,方法是从当前行搜索到顶部,直到第一次出现“::”,这是表格中类别的关键字。

如果有某种方法可以反转一个范围,我可以做一些像“= Match(”:: *“; $ A6:$ A $ 2)”来查找行。但是,这是不可能的。

有谁知道如何使用公式实现这一目标?

3 个答案:

答案 0 :(得分:2)

使用您提供的示例数据,并假设您的数据已经按照示例中所示进行了组织,您可以利用该组织并在单元格C2中使用此公式并复制下来:

=IF(LEFT(A2,2)="::","",IF(LEFT(A1,2)="::",MID(A1,4,LEN(A1)),C1))

enter image description here

答案 1 :(得分:1)

假设您的表位于A1中,请将其放在C3中:

=INDEX(A:A, AGGREGATE (14,6,ROW($A$1:A2)/(LEFT($A$1:A2,2)="::"),1))

然后复制下来。

答案 2 :(得分:0)

这是一种有点不同的方法。我只是基本上回应你发布的这部分内容,以证明这是可能的:

  

如果有某种方法可以反转一个范围,我可以做一些像“= Match(”:: *“; $ A6:$ A $ 2)”来查找行。但是,这是不可能的。

可以扭转范围,这很棘手。

正如您所指出的那样:$A6:$A$2无效,因为这相当于$A$2:$A6

但是,如果没有深入细节,这个数组公式将反转这个范围:

= INDEX($A$2:$A6,N(IF({1},MAX(ROW($A$2:$A6))-ROW($A$2:$A6)+1)))

请注意,这是一个数组公式,因此您必须按 Ctrl + Shift + Enter 而不是 Enter 将此公式输入单元格后。

您可以将其与MATCH公式结合使用,以获得所需的结果(告诉您::行的行数是多少):

= MATCH("::*",INDEX($A$2:$A6,N(IF({1},MAX(ROW($A$2:$A6))-ROW($A$2:$A6)+1))),0)

(也哈哈,这有点酷:通常你会在MATCH中看到INDEX有效地获得VLOOKUP类型的功能。这是我第一次看到它在INDEXMATCH的相反方式。)

请注意,我并不是说这对于这个特定问题来说必然是最好的方法,只是证明数组可以反转。