Excel VBA不断返回0

我试图通过简单地总结A / B和B / C的外汇汇率并且乘以findA / C汇率的手段来计算交叉汇率,并且我一直得到0。 这是代码:

Function forex(audData As Range, euData As Range) a = Application.Count(audData) e = Application.Count(euData) 'Counts how many values are in the data aSum = 0 eSum = 0 aMean = 0 eMean = 0 For i = 1 To aud ' This sums the 1st forex rate and finds the mean aSum = aSum + audData(i) Next i aMean = aSum / a For i = 1 To eu ' This sums the 2nd forex rate and finds the mean eSum = eSum + euData(i) Next i eMean = eSum / e forex = (aMean * eMean) End Function 

你可以使用Average()函数:

 Function forex(audData As Range, euData As Range) With WorksheetFunction forex = .Average(audData) * .Average(euData) End With End Function 

你似乎是未声明variables的受害者。 你有两个循环,

 For i = 1 To aud 

和(稍后)

 For i = 1 To eu 

audeu都没有声明。 因此,它们默认隐式值为0变体,因此这些循环都不会执行,并且所有variables都保持为0

你真的应该习惯于在所有模块的顶部使用Option Explicit 。 这可以通过在VBA编辑器选项中启用选项Require Variable Declarations来自动完成。 从长远来看,这将节省你几个小时的debugging时间。

我不能testing你的代码,但是如果你声明你的variables,并用我认为你的意思代替audeu ,你会得到:

 Function forex(audData As Range, euData As Range) As Double Dim a As Long, e As Long, aSum As Double, eSum As Double, aMean As Double, eMean As Double, i As Long a = Application.Count(audData) e = Application.Count(euData) 'Counts how many values are in the data For i = 1 To a ' This sums the 1st forex rate and finds the mean aSum = aSum + audData(i) Next i aMean = aSum / a For i = 1 To e ' This sums the 2nd forex rate and finds the mean eSum = eSum + euData(i) Next i eMean = eSum / e forex = (aMean * eMean) End Function 

我跳过了像aSum = 0的行,因为正确声明的VBAvariables有合理的默认值。