excel的vba编程时,如何让输入的参数是好几个连续的单元格?

我想用excel编程,可是需要的参数真的是太多了,我想使用
自己一选就可以选中一片单元格的方式,把连续的单元格当成一个参数.
比如我想编写一个求平方和的vba函数,假设函数名是pfh,
参数分别是A1,B1,C1,D1,如果我要求平方和的话,我只需要在E1中输入
=pfh(A1,B1,C1,D1)
但是,如果参数很多的话,这样输入是很累的,
我想要的效果是
=pfh(A1:D1)然后就得到结果,请问这样的函数如何写呢?

设置参数为range类型,即可以表示连续的区域。举例说明:

做一个自定义函数,该函数的参数为一个区域,结果输出为区域中的数值之和。

自定义函数的代码如下:

Function myf(a As Range)

Dim b As Variant

myf = 0

For Each b In a

myf = myf + b.Value

Next

End Function

使用该自定义函数结果如图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-01-12
Function Pfh(Rng As Range)
Dim Rng1 As Range
Dim k
For Each Rng1 In Rng
k = k + Rng1 ^ 2
Next
Pfh = k
End Function

把代码写到模块中
以下代码还可以忽略非数字
Function Pfh(Rng As Range)
Dim Rng1 As Range
Dim k
For Each Rng1 In Rng
If IsNumeric(Rng1) Then k = k + Rng1 ^ 2
Next
Pfh = k
End Function本回答被提问者和网友采纳
第2个回答  2012-12-25
public function 平方和(rng as range)
for each rng in selection
s=s+rng*rng

next
平方和=s
end function追问

是不是只要定义变量是range就可以了?如果rng是四个连续的单元格,那么如何把单元格第一个内容赋值给变量a,第二个赋值给b,第三个赋值给c,第四个赋值给d呢?在自定义函数中应该如何写呢?谢谢

追答

Public Function pfh(rng As Range)
Dim c
For Each c In rng
s = s + c * c
Next
pfh = s
End Function

你用这个,之前那个写错了!!
还有我解释一下,你定义变量range之后,下面的语句是对这个变量做一个循环,循环的区域就是你选择的区域,所以不用再一个一个给他赋值了!
循环以后就会自动的把每个值运算一遍。懂么?

追问

我就是想学会如何一个一个赋值的,所以才问你的.能用a=rng[1],b=rng[2],c=rng[3],d=rng[4]吗?

追答

一个一个赋值???神马意思??
你那样一个一个是不行的!!
哎。。。

为什么死脑筋呢??不明白。

要是想一个一个赋值,干嘛还要写函数呢??直接算出来就得了,绕一大圈子。

我写的那个其实就是一个一个赋值,只不过是自动判断的!循环了几次而已!

追问

我要写一个子函数, 其中变量a是一个变量,变量b是好几个连续的单元格,
如果不一个一个赋值,我就不能够见到变量名知道变量名的意思了,不能望变量名而生义,那么很容易犯错误的

第3个回答  2012-12-25
=pfh(A1,i), i代表单元格个数追问

那如果是求A1,B1,C1的平方和,也能这么做吗?

追答

楼上的Range更好

相似回答