单元格/范围作为函数的参数,并计算VBA中的平均值

时间:2016-10-30 21:24:13

标签: excel vba excel-vba

我正在尝试重新创建一个在一个范围内累加值的sum函数,我也希望它计算平均值,我稍后会添加更多的计算但是到目前为止我只测试了总和部分之前平均。但我不知道如何将细胞作为参数传递给函数,也不确定如何取总和的平均值,因为我不知道如何计算两个给定细胞之间的细胞数量参数。

Function ASDF(x As Range, y As Range) As Double

是我尝试过的,当我尝试像

这样的东西时,它不起作用
ASDF = "=sum(x:y)"

它让我在单元格中出错了我尝试用“#VALUE!”执行函数= ASDF(A1:A30)

基本上我如何将这些单元格传递给我的函数并使用它们?

这样做的正确方法是什么?如果给出范围的两个边界,还有一种方法可以找出它们之间有多少个单元格?所以,例如,如果我给a1和a30作为参数,有没有办法得到30个单元?

3 个答案:

答案 0 :(得分:1)

我让它工作了,似乎我不明白范围如何在VBA中起作用,我的代码下面得到了我想要的平均值,我只需要逐个遍历范围,我错误地假设有一个行命令可以为我计算一个范围内的单元格数。

Function ASDF(r As Range)

    Dim cell As Range, total As Double, count As Integer
    For Each cell In r
        total = total + cell.Value
        count = count + 1
    Next cell
    ASDF = total / count

End Function

答案 1 :(得分:0)

我可以看到你在那里尝试做什么 - 我有点惊讶它没有返回字符串" = sum(X:Y)"在你的所有单元格中 - 可能是错误可能是由于你已经用两个范围(x和y)定义了你的函数,而你只用一个来调用它(A1:A30)

如果您希望将功能设置为一次查看一个特定范围,那么最好将其设置为

WITH subjects as (
  SELECT book.book_subject, round(avg(book.book_cost),2) as avg_cost
  FROM book
  GROUP BY book.book_subject
)
SELECT
  book.book_num,
  book.book_title,
  book.book_subject,
  subjects.avg_cost,
  book.book_cost - subjects.avg_cost
FROM
  book
JOIN
  subjects ON subject.book_subject = book.book_subject

否则,您可以像以前一样使用X和Y,但这意味着在调用函数时需要输入" = ASDF(A1,A30)"说实话,并没有真正为你的功能添加任何东西。

通过上面的设置,要实际获得总和,您需要执行以下操作:

Function ASDF(x As Range) As Double

获取需要引用的单元格数量

ASDF = worksheetfunction.sum(x)

答案 2 :(得分:0)

使用以下

调整您的代码
ASDF=application.worksheetfunction.sum( range(x, y))