VBA Excel 2010 - 适用于范围的LN功能

时间:2014-01-21 14:56:45

标签: excel vba

当我在excel中使用LN函数时它允许我选择一个范围,但是当试图在vba中使用相同的函数时,参数必须是double,如何解决这个问题?

        On Error Resume Next

            Application.EnableEvents = False
            With Sheets("Stale")

                    ostatnia = .Cells(6, Columns.Count).End(xlToLeft).Column

                    Set zakres = Range(.Cells(6, 6), .Cells(6, ostatnia))
                    Set zakres2 = Range(.Cells(5, 6), .Cells(5, ostatnia))

                     ***`logarytm = Application.WorksheetFunction.Ln(zakres2)`***

                        nachylenie = Application.WorksheetFunction.Slope(zakres, zakres2)

                    MsgBox nachylenie & " $$ " & logarytm

            End With

            Application.EnableEvents = True

        On Error GoTo 0

3 个答案:

答案 0 :(得分:0)

在Excel 2013中,确实如此,您可以将LN()设置为指向范围,但实际上它只使用范围中第一个单元格的值。

这是VBA允许您执行的操作:它希望值应用该数字。 (事实上​​,当放入一个单元格时,数字列表的LN是什么?)

答案 1 :(得分:0)

来自Norie

LN is not a native VBA math function, but you can access it using Application.WorksheetFunction.

Log in VBA only takes one parameter.

But if you use Application.WorksheetFunction you access the LOG worksheet function which takes more parameters.

Log in VBA is the natural logarithim, whereas the LOG worksheet function has the 2nd parameter to specify the base, which if omitted defaults to 10.

答案 2 :(得分:0)

以下将正确执行excel在正常输入公式时所做的事情:

logarytm = Application.WorksheetFunction.Ln(CDbl(zakres2.Cells(1, 1)))

然后在VBA中你可以简单地使用:

logarytm = [Ln(A3:A9)]

在您的问题中,如果您想使用范围变量,那么最简单的解决方案将是:

logarytm = Evaluate("Ln(" & zakres2.Address & ")")