|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 WYS67 于 2018-9-5 14:29 编辑
老师:ZQ是根据第一行指定的间隔行数,计算逐个周期所在数据区域的自定义函数。 当公式和数据源在一个工作表内时,显示的计算结果很正确;但是,当数据源在其它工作表内时,由于缺少工作表名称作前缀,显示的计算结果【就是本周期所在数据区域】也默认数据区域在本表内,导致无法正确引用。 下面是ZQ代码和附件,恳请老师们根据附件里的说明,完善代码。如输入的公式为:{ =zq($A$5:$A$83836,$B$1,),则默认数据源在本工作表内;当输入的公式为:{ =zq(总表!$A$5:$A$83836,$B$1,),则说明数据源在《总表》里面,显示的计算结果必须自动添加表名前缀, 就如E5显示的 总表!A5:A40
Function ZQ(QY As Range, jg, bt)
Application.Volatile
arr = QY
If IsMissing(bt) Then bt = 4
For i = UBound(arr) To 1 Step -1
If arr(i, 1) <> "" Then last = i + 4: Exit For
Next
s = ""
adr = QY.Address(0, 0, xlA1)
amin = Split(adr, ":")(0)
amax = Split(adr, ":")(1)
For i = 1 To Len(amin)
If IsNumeric(Mid(amin, i, 1)) Then Exit For
s = s & Mid(amin, i, 1)
Next
smin = CLng(Replace(amin, s, ""))
smax = CLng(Replace(amax, s, ""))
ReDim brr(1 To QY.Rows.Count, 1 To 1)
For i = 1 To UBound(brr)
brr(i, 1) = ""
Next
i = 1
aa = smin + i - 1
For i = 1 To smax - smin + 1
bb = aa + jg - 1
If bb <= last Then
brr(i, 1) = (s & aa & ":" & s & bb)
aa = bb + 1
Else
brr(i, 1) = ""
End If
Next
ZQ = brr
End Function
让代码计算结果自动添加数据源所在的表名前缀.zip
(806.89 KB, 下载次数: 8)
如果实在不好办,也可以强制输入工作表表名,当作第三参数使用【缺省第三参数时,为数据源在本工作表内】 。如在B列输入区域数组公式 { =zq($A$5:$A$83836,$B$1,),显示B列结果;在E列输入区域数组公式[=zq($A$5:$A$83836,$E$1,"总表") ,则显示如E列添加了表名前缀总表!的计算结果。
|
|