|
本帖最后由 WYS67 于 2019-6-28 12:20 编辑
把指定范围数字转换成n区余.zip
(31.08 KB, 下载次数: 8)
M5:V50自定义函数NQUYU的代码如下:
Function NQUYU(rng As Range, a, b, Optional n = 3)
Dim ar, i: ar = rng
If Not IsArray(ar) Then ReDim ar(1 To 1, 1 To 1): ar(1, 1) = rng Else ar = rng
For i = 1 To UBound(ar)
If ar(i, 1) <> "" Then If CLng(ar(i, 1)) > CLng(a) - 1 And CLng(ar(i, 1)) < CLng(b) + 1 Then _
ar(i, 1) = Int((CLng(ar(i, 1)) - CLng(a)) * n / (CLng(b) + 1 - CLng(a))) & CLng(ar(i, 1)) Mod n Else ar(i, 1) = ""
Next
NQUYU = ar
End Function
当数据源区域A列不存在空格时,上面代码的计算结果完全正确!但如果数据源区域A列中间存在空格,或者输入公式的选定区域大于A列有数据区域时,输出结果列M5:V50的对应位置就会显示错误的“0”。
请老师们在合适的地方,添加用于屏蔽错误的代码--当数据源区域A列中间存在空格,或者输入公式的选定区域大于A列有数据区域时【也就是数据源下面为空白】,输出结果列M:V的对应位置必须显示为空白。
Function NQUYU(rng As Range, a, b, Optional n = 3)
Dim ar, i: ar = rng
If Not IsArray(ar) Then ReDim ar(1 To 1, 1 To 1): ar(1, 1) = rng Else ar = rng
For i = 1 To UBound(ar)
If ar(i, 1) ="" Then 其结果输出列相应地也显示为空白!
If CLng(ar(i, 1)) > CLng(a) - 1 And CLng(ar(i, 1)) < CLng(b) + 1 Then _
ar(i, 1) = Int((CLng(ar(i, 1)) - CLng(a)) * n / (CLng(b) + 1 - CLng(a))) & CLng(ar(i, 1)) Mod n Else ar(i, 1) = ""
Next
NQUYU = ar
End Function
如上面所示,If ar(i, 1) ="" Then 后面需要添加什么语句【貌似可取消 If ar(i, 1) <> "" Then】,才能使结果输出列的对应行显示为空?
|
|