|
楼主 |
发表于 2019-6-8 07:20
|
显示全部楼层
把指定范围数字转换成3区余lss001.zip
(38.4 KB, 下载次数: 2)
老师:实际应用中,发现27楼的代码存在下面三点问题:
1.当数据源A列的数字小于B2:V2指定的最小值时,就会出现如R5:V5错误;
2.当数据源A列的数字大于B3:V3指定的最大值时,就会出现如M8:V33错误;
3.当B2:V3指定范围内的数据总数不能被3整除时,就会出现P,U列里如粉红色填充的错误
解决的办法是:
1.设置:当数据源数字小于第二参数【即最小值】时,屏蔽错误的计算结果为空;
2.设置:当数据源数字大于第三参数【即最大值】时,屏蔽错误的计算结果为空;
3.改进当B2:V3指定范围内的数据总数不能被3整除时的算法,让计算结果与E,J列相同。
而通用的函数公式为:=IF(OR($A5="",$A5<B$2,$A5>B$3),"",INT(($A5-B$2)*3/(B$3+1-B$2))&MOD($A5,3))
恳请老师帮忙完善和修改下面的代码为盼。
下面是27楼代码:
Function SQUYU(rng As Range, y, x)
Dim ar, b, i
ar = rng: b = Int((x - y + 1) / 3)
If Not IsArray(ar) Then
ReDim ar(1 To 1, 1 To 1): ar(1, 1) = rng
Else: ar = rng
End If
For i = 1 To UBound(ar)
If ar(i, 1) <> "" Then
If y = 0 Then ar(i, 1) = Int(ar(i, 1) / b) & ar(i, 1) Mod 3
If y = 1 Then ar(i, 1) = Int((ar(i, 1) - 1) / b) & ar(i, 1) Mod 3
Else: ar(i, 1) = ""
End If
Next
SQUYU = ar
End Function
|
|