永发信息网

EXCEL VBA 自定义函数

答案:3  悬赏:40  手机版
解决时间 2021-03-01 16:16
  • 提问者网友:做自己de王妃
  • 2021-02-28 17:16
Function pbs(rng As Range) '输入变量是一个单元格
Application.Volatile
a = Cells(rng.Row, 1).Value '查找输入单元格同行的第一个单元格的值为a
b = Cells(1, rng.Column).Value * 1 ‘查找输入单元格同列的第一个单元格的值为b
c = Application.Match(a, Sheets("BOM").Columns(1), 0)’在另一个工作表上查找与a匹配的行数c
d = Application.Match(b, Sheets("PBS-OUT").Rows(1), 0)’在另一个工作表上查找与a匹配的列数d
With Sheets("BOM")
rng1 = .Range(.Cells(c, 4), .Cells(c, .Cells(c, .Columns.Count).End(xlToLeft).Column))
End With'取另一个工作表匹配列外的整行(非空白)
With Sheets("PBS-OUT")
rng2 = .Range(.Cells(2, d), .Cells(.Cells(.Rows.Count, d).End(xlUp).Row, d))
End With‘取另一个工作表匹配行外的整列(非空白)
pbs = Application.MMult(rng1, rng2)’计算乘积求和

我的问题是rng1 和 rng2 是根据 输入变量rng变动的,实际其他表上的符合rng1的数据变更时,函数无法自动计算显示错误,应如何修改
最佳答案
  • 五星知识达人网友:英雄的欲望
  • 2021-02-28 17:48
你的自定义函数易失性函数,不会自动更新,你只要在使用函数的公式后面加上强制更新的东西就行了
比如你的公式的结果是文本型的,那么
=pbs()&T(NOW())
比如你的公式的结果是数值型的,那么
=pbs()+N(T(NOW()))
就能强制自动更新
至于rng1和rng2,楼主试试用range的方式,也就是set rng1=range(xxxxxx)
全部回答
  • 1楼网友:人间朝暮
  • 2021-02-28 19:46
public function yang(r as range) as single dim k as range dim i as single for each k in r if k.value <> "" then i = i + k next k yang = i end function range(r)改成r
  • 2楼网友:duile
  • 2021-02-28 18:51
=SUMPRODUCT(B1:B7,C1:C7) 这个可以满足吧 平均算法 Public Function AVERAGEx(x As Range, y As Range) Dim m For i = 0 To x.Count - 1 If Cells(y.Row + i, y.Column).Value <> 0 Then m = m + Cells(x.Row + i, x.Column).Value End If Next AVERAGEx = m End Function 这是自定义函数,试试吧 求采纳为满意回答。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯