计算VBA中的行excel

时间:2013-08-28 13:10:18

标签: excel vba

我在VBA中设计一个myFunction(x,y,z)形式的函数,其中z是一个表,x可以取列标题的值。作为函数的一部分,我需要在z中找到行数。

我遇到了这方面的问题,因为我看起来建议使用length = z.Rows.Count,但当我尝试输出此值(如设置myFunction = length)时,会产生VALUE错误。但是,当我输出不直接使用myFunction = a的{​​{1}}时(一旦我使它工作,它最终将成为IF语句的一部分),该函数工作正常。我的代码如下:

length

为了测试它我还创建了另一个函数:

Public Function myFunction(x As String, y As Double, z As Range) As Double

    Dim upper_threshold As Double
    Dim lower_threshold As Double
    Dim a As Double

    Dim rates As Variant

    Dim u As Byte
    Dim l As Byte
    Dim r As Byte

    Dim length As Byte


    a = 0

    u = 2
    l = 1

    rates = Application.WorksheetFunction.Index(z, 1, 0)
    r = Application.WorksheetFunction.Match(x, rates, 0)

    length = z.rows.Count

    upper_threshold = z(u, 1)

    Do While y > upper_threshold

        u = u + 1
        l = l + 1

        upper_threshold = z(u, 1)
        lower_threshold = z(l, 1)

        If y < upper_threshold Then
            a = a + z(l, r) * (y - lower_threshold)
        Else
            a = a + z(l, r) * (upper_threshold - lower_threshold)
        End If

    Loop

myFunction = a

End Function

这个可以自行运行,但是当我尝试在其他函数中使用它时,我仍然会收到VALUE错误。我已经尝试将长度称为我能想到的每种类型,并且似乎没有帮助。

有谁能看到发生了什么?

编辑:我显然不是很清楚自己。没有引用长度的两行的功能按照我的意图工作。但是,我需要添加一些代码来增加其功能,这涉及计算表z中的行数。当我将这里显示的两行添加到函数中时,它继续工作,因为它不会影响输出。但是,如果我然后将输出设置为显示长度,即将倒数第二行更改为Public Function myRows(myTable As Range) As Double myRows = myTable.rows.Count End Function ,则会给出一个VALUE错误。据我所知,这让我有两个选择:程序中的其他东西正在影响这两行(语法或某些东西的冲突),或者我假设我可以输出{{1像那样。

1 个答案:

答案 0 :(得分:1)

你的问题在于:

rates = Application.WorksheetFunction.Index(z, 1, 0)

Index只接受一行或一列,否则会出现VALUE错误。