Public Function GetHeader(v As Variant, rTable As Range) As Variant
Dim rHead As Range, rData As Range, WhereIsIt As Range
Set rHead = Intersect(rTable(1).EntireRow, rTable)
Set rData = Intersect(rTable.Offset(1), rTable)
Set WhereIsIt = rData.Find(what:=v, After:=rData(1))
If WhereIsIt Is Nothing Then
v = "NOT FOUND"
Exit Function
End If
GetHeader = Intersect(WhereIsIt.EntireColumn, rHead).Value
End Function
3 回答
像这样的数组公式可行
同时按ShiftCtrlEnter
说Sheet2就像:
我们想要一个Sheet1上的公式,如果该列包含要找到的值,它将返回 header 行中的值 . 所以如果 A1 包含Good Guy那么公式应该返回Victor Laszlo
将以下UDF放在标准模块中:
用户定义函数(UDF)非常易于安装和使用:
ALT-F11调出VBE窗口
ALT-I ALT-M打开一个新模块
粘贴内容并关闭VBE窗口
如果保存工作簿,UDF将随之保存 . 如果您在2003年之后使用的是Excel版本,则必须将文件另存为.xlsm而不是.xlsx
要删除UDF:
如上所述调出VBE窗口
清除代码
关闭VBE窗口
要从Excel使用UDF:
=GetHeader(A1,Sheet2!A1:Z50)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关UDF的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
Macros must be enabled for this to work!
注意:
我们给UDF提供整个范围 including the header row (尽管 Headers 行从搜索中排除)
我认为如果使用辅助细胞,你可以做到这一点 .
在辅助行中,在每列上以精确模式使用
MATCH()
,以查找该列中值的行索引(如果存在) . 将其包装在NOT(ISERROR())
中,将结果转换为true / false二进制数据 . TRUE =匹配; FALSE =不匹配 .然后在辅助行上再次使用
MATCH()
,这次找到第一个TRUE(即匹配)列;MATCH()
将返回列的索引;然后你可以使用INDEX()
来查找该列第一行的值 .