EXCEL VBA 自定义函数 50
Functionpbs(rngAsRange)'输入变量是一个单元格Application.Volatilea=Cells(rng.Row,1).Value'查找输入单元...
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的数据变更时,函数无法自动计算显示错误,应如何修改 展开
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的数据变更时,函数无法自动计算显示错误,应如何修改 展开
3个回答
展开全部
=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
这是自定义函数,试试吧
求采纳为满意回答。
平均算法
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
这是自定义函数,试试吧
求采纳为满意回答。
追问
横向数组和纵向数组的乘积求和,SUMPRODUCT 好像不行
额。。没明白这串代码请加上标注
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ActiveSheet.Calculate 加个重算活动工作表看看,你这个可能还是rng变量的作用范围设立的有问题,或者加个T(now())
=value(pbs(rng)&T(now()),只要工作表有改动 公式就重算一次
=value(pbs(rng)&T(now()),只要工作表有改动 公式就重算一次
追问
试过了
如果是rng1 和rng2 是输入变量就没有问题(如MMULT本身)
就是因为rng1 和rng2是由rng 决定的,所以会出现错误。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |