引用特定列中的值

是否有一个Excel公式/ VBA脚本引用具有特定列名称的列中的单元格值?

例如:在该行的“水果的价格”列中的值与“水果的价格”的值相乘。

通常这很容易通过单元格引用完成,但是我需要使用特定的列名称来完成,因为列可能位于不同的工作表中的不同位置。 我想将它编码到一个用户定义的函数中,只要标题名称相同,就可以使用它,而不pipe列的位置如何。

谢谢你的帮助!

如果像我想象的那样,“列名”是指列的第一个单元格,则可以按照您所说的执行对用户函数的search,然后执行操作:

Public Function myOperation(ByVal columnHeader1 As String, ByVal columnHeader2 As String) As Long 'note: if you want to hardcode the values, you just need to remove the arguments from the brackets above and uncomment the following two lines of code: 'columnHeader1 = "# of fruits" 'columnHeader2 = "price of fruit" cnt1 = 1 cnt2 = 1 Do While ActiveSheet.Cells(1,cnt1).Value <> columnHeader1 cnt1 = cnt1 + 1 Loop Do While ActiveSheet.Cells(1,cnt2).Value <> columnHeader2 cnt2 = cnt2 + 1 Loop myOperation = ActiveSheet.Cells(Application.Caller.Row, cnt1).Value*ActiveSheet.Cells(Application.Caller.Row,cnt2).Value End Function 

在这种情况下,你需要input一个单元格的公式:

 =myOperation("# of fruit", "price of fruit") 

这将返回,在这个单元格,两者之间的产品在同一行(我让你pipe理自定义)。 请注意,你将需要一个error handling(如果你input一个不存在的名字,你有风险进入一个无限循环,参考Christmas007回答如何陷阱,如果查找实际上发现了什么)。

编辑

我用Application.Callerreplace了ActiveCell ,使公式dynamic地响应函数所在的调用者单元格。

这就是硬编码值函数的样子:

 Public Function myOperation() As Long columnHeader1 = "# of fruits" columnHeader2 = "price of fruit" cnt1 = 1 cnt2 = 1 Do While ActiveSheet.Cells(1, cnt1).Value <> columnHeader1 cnt1 = cnt1 + 1 Loop Do While ActiveSheet.Cells(1, cnt2).Value <> columnHeader2 cnt2 = cnt2 + 1 Loop myOperation = ActiveSheet.Cells(Application.Caller.Row, cnt1).Value * ActiveSheet.Cells(Application.Caller.Row, cnt2).Value End Function 

并用一个简单的=myOperation()调用到单元格中。

为了后代的缘故,我将把@ fnostro的回答放在他的评论上。

“这不是在Excel中完成的事情,当然你可以通过在你的函数中执行一个search,然后在下面的单元格中执行search,但是为什么你要devise一个带有漫游列标题的数据呢?使用命名范围,它们将代表工作簿中的一个固定的位置,但它们可以在任何地方,函数总是使用RangeName而不pipe它被定义在哪里。

不过,您可以使用search来做到这一点:

 Sub Macro1() Dim ColNum As Long, LastCol As Long LastCol = Cells(1, Columns.Count).End(xlToLeft).Column If Not Range(Cells(1, 1), Cells(1, LastCol)).Find("# of Fruit", LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then ColNum = Range(Cells(1, 1), Cells(1, LastCol)).Find("# of Fruit", LookIn:=xlValues, LookAt:=xlWhole).Column Else MsgBox "'# of Fruit' Not Found" End If End Sub 

然后, ColNum将成为您对该专栏的参考。

编辑:忘记包含一个error handling程序,如果.Find返回Nothing 。 现在修好了