积极答复者
Excel 中如何如何将同时满足A列和B列数值对应的C列数值返回?

问题
答案
-
看明白了,原来你要的结果是C列和D列合在一起的。
试试这个:
=lookup(,0/("a3"=a1:a6&b1:b6),c1:c6&d1:d6)
在单元格里横行的……- 已标记为答案 宋翔Moderator 2010年10月1日 13:02
全部回复
-
用match("a3",a1:a6&b1:b6,)来判断符合条件的行号,如果没有符合的会出错,这时可以在外面套ISERROR,即if(iserror(match("a3",a1:a6&b1:b6,)),7,match("a3",a1:a6&b1:b6,))或者用另一种数组方式:=sumproduct(("a3"=a1:a6&b1:b6)*row(1:6))
确定定行号后,外面用INDIRECT、OFFSET、INDEX……随便了:
=indirect("c"&match("a3",a1:a6&b1:b6,))
=offset(c1,match("a3",a1:a6&b1:b6,)-1,)
=index(c1:c6,match("a3",a1:a6&b1:b6,))
在单元格里横行的…… -
仔细研究了内给出的每一个方法,总的来说都是先返回行号,然后再使用行号返回对应的数据。
=indirect("c"&match("a3",a1:a6&b1:b6,))
这个公式不可用,因为C列里的例子只是个示例,其中的数据是不确定的,所以不可以用"C"+Number来实现。=offset(c1,match("a3",a1:a6&b1:b6,)-1,)
这个方法确实实现了C列数据的返回。
但是当数据是动态的或者数据并不是从第一行开始的会出现数学运算,对今后的维护不方便。
无法返回数据为c1:c6&d1:d6这样的极端例子。=index(c1:c6,match("a3",a1:a6&b1:b6,))
比校完美的实现了最总的结果。而且可以返回数据为c1:c6&d1:d6这样的极端例子。
另一个方法
=VLOOKUP("a3",IF({1,0},A2:A10&B2:B10,C2:C10&D2:D10),2,FALSE)
我最终选择这个方法来使用,因为Vlookup更符合我的使用习惯。这里的关键是if({1,0},A:A&B:B,C:C),这个用法我之前从未见过,
{1,0}的状态不同时返回不同的数组。
当{1,0}时返回数组A:A&B:B, C:C
当{0,1}时返回数组C:C, A:A&B:B
A:A这里仅仅表示数据列,在实际使用时不可以这样使用,否则会形成一个很大的数组,影响运行速度,应该使用a1:a6这样的例子。
如果是动态数据表,可以用INDIRECT("A1:A"&COUNTA(A:A))来获取数据区域,要注意的是不能有空的数据行。 -
看明白了,原来你要的结果是C列和D列合在一起的。
试试这个:
=lookup(,0/("a3"=a1:a6&b1:b6),c1:c6&d1:d6)
在单元格里横行的……- 已标记为答案 宋翔Moderator 2010年10月1日 13:02