Excel VBA使用日志函数

时间:2018-04-20 16:49:07

标签: performance excel-vba vba excel

如何改进下面代码的性能?

我是你的普通工程师(也就是说,不是一个精明的程序员),并且正在摆弄一个VBA项目,以使其更快地运行。这需要几天,现在我让它在几个小时内运行,但我知道它可以更快,而且最耗时的部分就是这个。

我用下面的代码提供了数千个具有声学/振动光谱信息的矢量。对于每个光谱,代码运行大约需要30秒。

    Sub time_test()

        '################################################################################################
        'This is just to simulate the vector of input data which in reality would be an acoustic spectrum
        Dim yval(8000000, 1) As Double
        Dim val(8000000, 1) As Double
        For i = 0 To 8000000
            yval(i, 0) = 100 * Rnd
        Next i
        Length = 8000001
        '################################################################################################


        '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
        'From here on is where I must improve the performance of the code
        Timing = Timer

        For Index = 1 To Length
            val(Index - 1, 1) = 20 * Log10(yval(Index - 1, 0), "Pre")
        Next Index

        Debug.Print Round(Timer - Timing, 2)
        '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    End Sub

    Public Function Log10(Valeur As Double, sType As String) As Double

        Select Case sType
            Case "Vib"
                If Valeur <> 0 Then
                    Log10 = Log(Valeur) / Log(10#)
                End If
            Case "Pre"
                If Valeur <> 0 Then
                    Log10 = Log(Valeur / (2 * (10 ^ -5))) / Log(10#)
                End If
        End Select

    End Function

0 个答案:

没有答案
相关问题
最新问题