在Excel中从数据表中的文本值获取单元格引用

qzwqbdag  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(142)

我尝试使用COLUMN函数,其中嵌套了VLOOKUP,如下所示:
COLUMN(VLOOKUP(A2,ws2!$C$2:$E$80,3,FALSE))
但这并不像预期的那样有效我猜这是因为Vlookup函数返回文本值,而Column函数需要单元格引用。
有没有一种方法可以从查找值中获取单元格引用?
我不能使用Match函数,因为它只能处理一维数组,但查找值可以来自数据表中的任何行或列。

kadbb459

kadbb4591#

VLOOKUP从给定的列开始,并返回从start column = 1开始向右的引用列n列中的值。
因此=VLOOKUP(A2,B2:C10,2,FALSE)返回列C中的值(列B =1,列C =2),其中列A中找到的第一个值(A2的起始列:C10)等于A2的值。
如果我们将2替换为1,它将返回列A(=1)中的值,其中该列中的值与A20的值匹配。
如果我们用3替换2,它会返回一个错误,因为我们引用的范围由2列组成,所以引用第3列是不可能的。你必须将范围扩展到=VLOOKUP(A2,B2:D10,2,FALSE)
也就是说,要在2D范围内查找值的列号,VLOOKUP将不起作用。
您可以像这样将IF或REPT与TEXTJOIN结合使用:
=TEXTJOIN(", ",1,TRANSPOSE(IF($C$2:$G$5=$A2, COLUMN($C$2:$G$5),"")))

=TEXTJOIN(", ",,REPT(COLUMN($C$2:$E$4),$C$2:$E$4=$A2))
如果在范围内发现多个值,两个版本合并都会合并列号(逗号分隔):

d8tt03nd

d8tt03nd2#

是的,COLUMN函数需要一个单元格引用,而VLOOKUP函数返回一个值,而不是单元格引用。
尝试以下功能:它将获取单元格A2中ws 2!$C$2:$E$80并返回该列号。如果未找到,则返回#N/A。

=MIN(IF(ws2!$C$2:$E$80=A2, COLUMN(ws2!$C$2:$E$80)-COLUMN(ws2!$C$2)+1))
dxxyhpgq

dxxyhpgq3#

既然你已经标记了VBA,你可以使用一个非常简单的UDF和Range.Find方法:

Option Explicit

Public Function LookupAddress(lookup_value As String, lookup_range As Range, Optional match_case As Boolean) As String
    LookupAddress = lookup_range.Find(lookup_value, LookAt:=xlWhole, MatchCase:=match_case).Address
End Function

然后,要返回匹配值的单元格地址(不区分大小写),请使用:用途:

=LookupAddress(A2, ws2!$C$2:$E$80)

或者,对于区分大小写的匹配,用途:

=LookupAddress(A2, ws2!$C$2:$E$80, TRUE)

您还可以在未找到匹配项的情况下向函数添加错误处理;但是,使用现有的IFERROR()函数也很容易:

=IFERROR(LookupAddress(A2, ws2!$C$2:$E$80, TRUE), "No match")

您还可以使用其他选项,例如使用LookAt:=xlPart查找部分匹配,使用SearchOrder:=xlByColumns按列而不是行进行搜索,或使用SearchDirection:=xlPrevious从下到上、从右到左进行搜索。但是,上面概述的基本UDF应该满足您的需求。

**注意:如果您的目的是在一列中查找值,然后在另一列中返回相应值的地址,则可以在Range.Find.Offset.Address中使用额外的 *col_offset参数。

干杯!干杯!

相关问题