Excel中 - 返回值,细胞已被匹配后,头之间(Excel - Return value, aft

2019-09-21 02:10发布

在这里我再次,要求在这个伟大的社会帮助。 我希望我能retribute为你做了一天多。

在图片中的第4列(d)是预期的输出。

这是我如何把这个问题:

  • 如果一个数字是负数/或具有A(在A行中数始终是负的);

    • 使用匹配检查,如果有一个记者(正)范围内的数量(头之间);

    • 如果存在匹配输出已匹配的F ID(第一列)的值,然后,输出该已匹配的所述A的ID

  • 如果没有,什么都不做或放置一个0。

这些问题是:

  • 它需要循环,因为负值都会受到积极的后;

  • 搜索必须包含头之间。

我试图从我放在其他问题的技巧和代码修改和创建我自己的解决方案,但没有成功..

非常感谢!

Answer 1:

尝试粘贴此进入VBE立即窗口,按下回车键:

Names.Add "i", "=$A$1:$A$12": _
Names.Add "v", "=$B$1:$B$12": _
Names.Add "m", "=$D$1:$D$12": _
Names.Add "h", [IF({1},LOOKUP(ROW(i),ROW(i)/(v=INDEX(v,1))))]: _
Names.Add "l", [IF({1},LOOKUP(ROW(i),ROW(i)/(v=INDEX(v,1)),FREQUENCY(-ROW(i),IF(v=INDEX(v,1),-ROW(i),0))-1))]: _
[m]=[IF(COUNTIF(OFFSET(v,h,,l),"=-"&v),CONCATENATE("=",ADDRESS(ROW(i),COLUMN(i),4),"&"" AND ""&INDEX(",ADDRESS(h+1,COLUMN(i)),":",ADDRESS(h+l,COLUMN(i)),",MATCH(-",ADDRESS(ROW(v),COLUMN(v),4),",",ADDRESS(h+1,COLUMN(v)),":",ADDRESS(h+l,COLUMN(v)),",0))"),"")]: _
Names("h").Delete: _
Names("l").Delete

在问题的输出为例如数据是:

D5  =A5&" AND "&INDEX($A$2:$A$6,MATCH(-B5,$B$2:$B$6,0))
D11 =A11&" AND "&INDEX($A$11:$A$12,MATCH(-B11,$B$11:$B$12,0))

注意 :此方法使用命名数组来存储用于报头的位置的中间结果h与部件长度l和需要大约3-4秒时的范围名称i (ID), v (值)和m (匹配)延伸到40000点的行。 这样做的一个简单的公式是可能的,但是这将是非常低效的向下填充的大型数据集。



Answer 2:

这是公式我会用。 请注意,你必须明确地引用这些范围的标头。 您可能要定义命名范围,以避免错别字和方便阅读。 此公式将被放入D2 (填充拖动到D6 )。

=IFERROR(IF(B2<0,INDEX($A$2:$A$6,MATCH(B2*-1,$B$2:$B$6,0),1) & " AND " & A2,""),"")

工作原理:IFERROR只是赶上#NA时,有不匹配。 如果该值B2为负(小于0),则在一个行的第一列具有匹配正值返回值。 我们使用的绝对引用INDEXMATCH ,因为我们不想看A3:A7A4:A8等当公式被拖累到其他细胞。 只有值进行比较和其相应的ID应该是相对的( A2 / B2 ),因为我们希望的是改变每行。

下面是它的外观。 请记住,因为我的价值观是从A1:B6我的公式将改为INDEX($A$1:$A$6...MATCH(B1*-1,$B$1:$B:$6,0)...



文章来源: Excel - Return value, after cell has been matched, between headers