Excel – 在单元格匹配之后,在标题之间返回值

快照

在这里,我再次向这个伟大的社区寻求帮助。 我希望我能像你有一天一样做出更多的贡献。

图中的第四列(D)是预期的输出。

这是我如何把问题:

  • 如果一个数字是负数/或者有一个A(A行中的数字总是负数);

    • 使用MATCH来检查范围内(标题之间)是否有对应(正数)的数字;

    • 如果MATCH输出已经匹配的F的ID(第一列)的值,然后输出已匹配的A的ID

  • 如果不是,则什么都不要做,或者放一个0。

问题是:

  • 它需要循环,因为负值可以在正值之后出现;

  • search必须包含在标题之间。

我试图修改和创build我自己的解决scheme,从我提出的其他问题的提示和代码,但没有成功..

非常感谢!

尝试粘贴到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中间结果,当范围名称i (id), v (值)和m (match)扩展到40,000行时,需要大约3-4秒。 一个简单的公式是可能的,但是填充大数据集是非常低效的。

这是我会使用的公式。 请注意,您必须明确引用标题的范围。 您可能需要定义命名范围以避免拼写错误并减轻可读性。 这个公式将被放入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)...

XL