使用UDF中的表格';Excel 2007中的s

使用UDF中的表格';Excel 2007中的s,excel,user-defined-functions,vba,Excel,User Defined Functions,Vba,我正在为Excel2007编写一个UDF,我想将一个表传递给它,然后在UDF中引用该表的部分。例如,我的名为“Stock”的表可能看起来像这样: 列出库存中的成本项目 泰迪熊1010英镑 棒棒糖20p1000 我有一个UDF,我想计算库存中所有项目的总成本(实际示例要复杂得多,如果没有非常复杂的公式就无法完成) 理想情况下,UDF的语法如下 TOTALPRICE(Stock) 根据我的计算,这意味着UDF会有签名 Function TOTALPRICE(table As Range) As V

我正在为Excel2007编写一个UDF,我想将一个表传递给它,然后在UDF中引用该表的部分。例如,我的名为“Stock”的表可能看起来像这样:

列出库存中的成本项目

泰迪熊1010英镑

棒棒糖20p1000

我有一个UDF,我想计算库存中所有项目的总成本(实际示例要复杂得多,如果没有非常复杂的公式就无法完成)

理想情况下,UDF的语法如下

TOTALPRICE(Stock)
根据我的计算,这意味着UDF会有签名

Function TOTALPRICE(table As Range) As Variant
我遇到的问题是如何引用表中的列并遍历它们。理想情况下,我希望能够引用列标题(比如table[Cost])。

这是非常基本的(没有双关语的意思),但它可以实现您描述的功能。对于较大的表,它可能会变得很慢,因为它在宏函数和工作表之间来回移动,这样的活动会累积起来

它假定您有一行标题和一列名称(因此For循环变量从2开始)

有各种各样的事情可能是必要的——我们可以把它们留到另一个问题或关于这个问题的另一轮讨论中

请注意,该函数返回一个“变量”,顺便说一句

这是非常基本的(没有双关语的意图),但它会做你所描述的。对于较大的表,它可能会变得很慢,因为它在宏函数和工作表之间来回移动,这样的活动会累积起来

它假定您有一行标题和一列名称(因此For循环变量从2开始)

有各种各样的事情可能是必要的——我们可以把它们留到另一个问题或关于这个问题的另一轮讨论中

请注意,该函数返回一个“变量”,顺便说一句


注意:我没有Excel 2007,我正在尝试使用网络上的MSDN文档编写此文档。
看起来该范围将包含ListColumns集合

因此,语法可以是table.ListColumns(“Cost”)。

这行得通吗?

注意:我没有Excel 2007,我正在尝试使用网络上的MSDN文档编写此文档。
看起来该范围将包含ListColumns集合

因此,语法可以是table.ListColumns(“Cost”)。

这行得通吗?

虽然这行得通,并且可以让我完成我的电子表格(为此我感谢你),但它没有利用Excel 2007表格功能,我发现关于在宏和UDF中使用这些功能的文档很少,令人烦恼,因此我将让大家继续使用它,以提供更具体的示例。注意,如果您要传递一个表,它不包括范围中的标题,因此您应该从索引1而不是索引2开始。虽然这起作用,但可以让我完成我的电子表格(为此我感谢您)它没有利用Excel 2007表格功能,我发现关于在宏和UDF中使用它们的文档很少,这让人很恼火,所以我想让大家来举一些更具体的例子。注意,如果你传入一个表格,它不包括范围内的标题,所以你应该从索引1开始,而不是从2开始。不幸的是,你不能用字符串索引到它。不幸的是,你不能用字符串索引到它。
Public Function TotalPrice(table As Range) As Variant

Dim row As Long, col As Long
Dim total As Double

    For row = 2 To table.Rows.Count
        For col = 2 To table.Columns.Count
            TotalPrice = TotalPrice + table.Cells(row, col) * table.Cells(row, col + 1)
        Next
    Next

End Function