#价值!偏移范围值之和的错误
#value! error for sum of offset range values
谁能告诉我为什么我会得到#VALUE!使用我制作的这个功能时出错?
这看起来很简单,但我是 VBA 的新手,所以我不明白哪里出了问题,尤其是当我没有收到来自编译器的任何错误时。
我正在尝试在 A 列中选择年份,并将函数值设为从它右侧开始的对角线 4 个单元格的总和。
Function QTRtoANN(yearq As Range, age As Integer) As Double
Dim qtr1 As Double
Dim qtr2 As Double
Dim qtr3 As Double
Dim qtr4 As Double
Dim qtr1OS As Double
Dim qtr2OS As Double
Dim qtr3OS As Double
Dim qtr4OS As Double
qtr1OS = (age / 12) + 3 * ((age / 12) - 1)
qtr2OS = (age / 6) + 2 * ((age / 12) - 1)
qtr3OS = (age / 4) + ((age / 12) - 1)
qtr4OS = (age / 3)
qtr1 = Range(yearq).Offset(qtr1OS, 0).Value
qtr2 = Range(yearq).Offset(qtr2OS, -1).Value
qtr3 = Range(yearq).Offset(qtr3OS, -2).Value
qtr4 = Range(yearq).Offset(qtr4OS, -3).Value
QTRtoANN = qtr1 + qtr2 + qtr3 + qtr4
End Function
主要问题是您在从 yearq
偏移时使用负参数 (-1、-2、-3) 作为 ColumnOffset。快速阅读 MSDN - Range.Offset
property,"positive values are offset to the right, and negative values are offset to the left." 照原样,代码试图引用 A 列左侧的列,导致您的错误。
也如评论中所述:
yearq
已经是 Range
,所以只是 yearq.Offset...
- 如果
age
不是12的倍数,你的除法age/12
、age/6
等不会得到整数,后续尝试Offset
会抛出错误。 我没有做那个改变,但你可以Round
或声明你的变量qtr1OS
、qtr2OS
等,如Int
静静地丢弃任何小数值。
所以您修改后的 Function
可能看起来像这样:
Function QTRtoANN(yearq As Range, age As Integer) As Double
Dim qtr1 As Double
Dim qtr2 As Double
Dim qtr3 As Double
Dim qtr4 As Double
Dim qtr1OS As Double
Dim qtr2OS As Double
Dim qtr3OS As Double
Dim qtr4OS As Double
qtr1OS = (age / 12) + 3 * ((age / 12) - 1)
qtr2OS = (age / 6) + 2 * ((age / 12) - 1)
qtr3OS = (age / 4) + ((age / 12) - 1)
qtr4OS = (age / 3)
qtr1 = yearq.Offset(qtr1OS, 0).Value
qtr2 = yearq.Offset(qtr2OS, 1).Value
qtr3 = yearq.Offset(qtr3OS, 2).Value
qtr4 = yearq.Offset(qtr4OS, 3).Value
QTRtoANN = qtr1 + qtr2 + qtr3 + qtr4
End Function
谁能告诉我为什么我会得到#VALUE!使用我制作的这个功能时出错? 这看起来很简单,但我是 VBA 的新手,所以我不明白哪里出了问题,尤其是当我没有收到来自编译器的任何错误时。
我正在尝试在 A 列中选择年份,并将函数值设为从它右侧开始的对角线 4 个单元格的总和。
Function QTRtoANN(yearq As Range, age As Integer) As Double
Dim qtr1 As Double
Dim qtr2 As Double
Dim qtr3 As Double
Dim qtr4 As Double
Dim qtr1OS As Double
Dim qtr2OS As Double
Dim qtr3OS As Double
Dim qtr4OS As Double
qtr1OS = (age / 12) + 3 * ((age / 12) - 1)
qtr2OS = (age / 6) + 2 * ((age / 12) - 1)
qtr3OS = (age / 4) + ((age / 12) - 1)
qtr4OS = (age / 3)
qtr1 = Range(yearq).Offset(qtr1OS, 0).Value
qtr2 = Range(yearq).Offset(qtr2OS, -1).Value
qtr3 = Range(yearq).Offset(qtr3OS, -2).Value
qtr4 = Range(yearq).Offset(qtr4OS, -3).Value
QTRtoANN = qtr1 + qtr2 + qtr3 + qtr4
End Function
主要问题是您在从 yearq
偏移时使用负参数 (-1、-2、-3) 作为 ColumnOffset。快速阅读 MSDN - Range.Offset
property,"positive values are offset to the right, and negative values are offset to the left." 照原样,代码试图引用 A 列左侧的列,导致您的错误。
也如评论中所述:
yearq
已经是Range
,所以只是yearq.Offset...
- 如果
age
不是12的倍数,你的除法age/12
、age/6
等不会得到整数,后续尝试Offset
会抛出错误。 我没有做那个改变,但你可以Round
或声明你的变量qtr1OS
、qtr2OS
等,如Int
静静地丢弃任何小数值。
所以您修改后的 Function
可能看起来像这样:
Function QTRtoANN(yearq As Range, age As Integer) As Double
Dim qtr1 As Double
Dim qtr2 As Double
Dim qtr3 As Double
Dim qtr4 As Double
Dim qtr1OS As Double
Dim qtr2OS As Double
Dim qtr3OS As Double
Dim qtr4OS As Double
qtr1OS = (age / 12) + 3 * ((age / 12) - 1)
qtr2OS = (age / 6) + 2 * ((age / 12) - 1)
qtr3OS = (age / 4) + ((age / 12) - 1)
qtr4OS = (age / 3)
qtr1 = yearq.Offset(qtr1OS, 0).Value
qtr2 = yearq.Offset(qtr2OS, 1).Value
qtr3 = yearq.Offset(qtr3OS, 2).Value
qtr4 = yearq.Offset(qtr4OS, 3).Value
QTRtoANN = qtr1 + qtr2 + qtr3 + qtr4
End Function