我想开发一个像这样的简单函数
搜索(值,范围,偏移)
给出下表
A B C
1 10 A desc for 10a
2 20 B desc for 20b
3 30 C desc for 30c
将返回以下内容
Search(10; a1:c3; 3) -> desc for 10a
Search(A; a1:c3; 3) -> desc for 10a
Search(20; a1:c3; 3) -> desc for 20a
Search(B; a1:c3; 3) -> desc for 20a
Search(desc for 20a; a1:c3; 3) -> desc for 20a
也就是说,它应该允许我搜索范围内的任何列,而不仅仅是像VLookup那样的第一个列
答案 0 :(得分:1)
这取决于您的列的可预测性。如果没有区别特征,那么你将度过艰难时期。但是,如果您可以从搜索字符串中确定哪个列将包含匹配项,那么您就可以了。在您的示例中,数字值仅存在于A列中,单个字母字符串仅存在于B列中,而较长的字符串仅存在于C列中。在这种情况下,您可以使用以下两个公式:
将搜索值放在E1中。在F1中:=IF(ISNUMBER($E1),0,IF(LEN($E1)=1,1,2))
在G1:=VLOOKUP($E1,OFFSET($A$1,0,$F1,10,(3-$F1)),(3-$F1),FALSE)
您可以将两者合并为一个公式,将所有$ F1替换为完整的公式。为了清晰起见,我将它们分开在这里。
此外,偏移公式中的10需要与查找范围中的总行数相对应。