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的数据变更时,函数无法自动计算显示错误,应如何修改
EXCEL VBA 自定义函数
答案:3 悬赏:40 手机版
解决时间 2021-03-01 16:16
- 提问者网友:做自己de王妃
- 2021-02-28 17:16
最佳答案
- 五星知识达人网友:英雄的欲望
- 2021-02-28 17:48
你的自定义函数易失性函数,不会自动更新,你只要在使用函数的公式后面加上强制更新的东西就行了
比如你的公式的结果是文本型的,那么
=pbs()&T(NOW())
比如你的公式的结果是数值型的,那么
=pbs()+N(T(NOW()))
就能强制自动更新
至于rng1和rng2,楼主试试用range的方式,也就是set rng1=range(xxxxxx)
比如你的公式的结果是文本型的,那么
=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
这是自定义函数,试试吧
求采纳为满意回答。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯