【发布时间】:2013-03-18 06:06:18
【问题描述】:
我正在尝试编写一个函数,该函数采用一系列数据并从用户提供的列中计算两个数字的比率。我想在行尾打印这个比率,但由于某种原因,我无法使用单元格函数引用行中的最后一个单元格。相反,Cells 函数只是不断地向我提供该单元格的值,而不是单元格地址。我认为细胞功能也提供了地址。谁能告诉我这是错的还是我的代码错了?
这里是代码
Function calculateRatio(table As Range, numerator As Integer, denominator As Integer, Optional nameOfRatio As String)
On Error GoTo ExpectedError
Dim num As Double
Dim denom As Double
Dim ratio As Double
If table.Columns.Count < 2 Then
MsgBox ("Not enough data. Requires at least two or more rows.")
Exit Function
End If
If numerator < 1 Or numerator > table.Columns.Count Then
MsgBox ("Not an acceptable Numerator. Must be greater than zero and less than " & table.Columns.Count)
Exit Function
End If
If denominator < 1 Or denominator > table.Columns.Count Then
MsgBox ("Not an acceptable Denominator. Must be greater than zero and less than " & table.Columns.Count)
Exit Function
End If
For Counter = 1 To table.Rows.Count
num = table.cells(Counter, numerator)
denom = table.cells(Counter, denominator)
ratio = num / denom
temp = table.cells(counter, table.columns.count)
temp.Offset(0, 1).Value = ratio
Next Counter
Exit Function
ExpectedError:
Call MsgBox("Something went wrong. Make sure you are referencing columns with numbers and not text." & Err.Number & " : " & Err.Description)
End
End Function
更新
这是更新后的代码:
Function calculateRatio(table As Range, numerator As Integer, denominator As Integer, Optional nameOfRatio As String)
Dim num As Double
Dim denom As Double
Dim ratio As Double
Dim temp As Range
Dim counter As Integer
If table.Columns.Count < 2 Then
MsgBox ("Not enough data. Requires at least two or more rows.")
Exit Function
End If
If numerator < 1 Or numerator > table.Columns.Count Then
MsgBox ("Not an acceptable Numerator. Must be greater than zero and less than " & table.Columns.Count)
Exit Function
End If
If denominator < 1 Or denominator > table.Columns.Count Then
MsgBox ("Not an acceptable Denominator. Must be greater than zero and less than " & table.Columns.Count)
Exit Function
End If
For counter = 1 To table.Rows.Count
num = table.cells(counter, numerator)
denom = table.cells(counter, denominator)
ratio = num / denom
Set temp = table.cells(counter, table.Columns.Count)
temp.Offset(0, 1).Value = ratio
Next counter
End Function
【问题讨论】:
-
您是否尝试在工作表中将此函数作为 UDF 调用?
-
我试图在工作表中将其称为 UDF。这会导致问题吗?
-
您无法使用 UDF 操作工作表单元格。
-
这只能使用子程序来完成吗?我之前已经能够使用子程序操作工作表单元格。
-
是的,可以使用子程序来完成。有关更详细解释的一些链接,请参阅下面的答案。但一般来说,子程序可以操作工作表,而函数不能。 (从子例程中调用的函数可以,但是将函数用于除向子例程返回值之外的任何事情可能是一个坏习惯。
标签: excel excel-2010 vba