问题
2010年2月11日星期四 上午10:42
示例:
A B C D
a 1 c1 d1
a 2 c2 d2
a 3 c3 d3
b 1 c4 d4
b 2 c5 d5
b 3 c6 d6
如上所示。如何返回同时满足A列和B列的数值的C列数值?
例如:A列为a,并且B列为3,我需要得到c3。
用vlookup只能判断第一列,不能判断多列。
全部回复 (6)
2010年2月21日星期日 下午1:27 ✅已答复
看明白了,原来你要的结果是C列和D列合在一起的。
试试这个:
=lookup(,0/("a3"=a1:a6&b1:b6),c1:c6&d1:d6)
在单元格里横行的……
2010年2月11日星期四 下午3:17
=sumproduct((a1:a6="a")*(b1:b6=3)*(c1:c6))在单元格里横行的……
2010年2月11日星期四 下午4:09
你给的公式可以实现C列为数字的情况,文本值就会出错。我上面的例子C1~C6就是文本值而不是单元格。
请问如何解决?
2010年2月12日星期五 上午11:15
用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,))在单元格里横行的……
2010年2月21日星期日 下午12:25
仔细研究了内给出的每一个方法,总的来说都是先返回行号,然后再使用行号返回对应的数据。
=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))来获取数据区域,要注意的是不能有空的数据行。
2010年2月22日星期一 下午2:38
=index(c1:c6,match("a3",a1:a6&b1:b6,))对于多列查找还是这种方法好但这公式有些问题,正确的应为
{=index(c1:c6,match(A&B,a1:a6&b1:b6,))}
A和B分别表示你需要在A列和B列中查找的值,其实还可以扩展到三列甚至更多。
在这补充说明一下,vlookup()函数一个主要缺点就是必须将最左侧的列用作查找列,但可以通过组合使用MATCH()和INDEX()函数将任何列用作查找列。