|
楼主 |
发表于 2019-12-6 14:48
|
显示全部楼层
本帖最后由 WYS67 于 2019-12-6 15:24 编辑
老师:我给15楼的代码添加了第三参数【温冷号码的十、个位选择】--当第三参数指定为0时【可省略】,仍然执行15楼代码的计算功能;
当第三参数指定为1时,则显示两位数结果的十位数;
当第三参数指定为2时,则显示两位数结果的个位数;
想不通,为什么第三参数指定为1、2时,D、E、G、H列显示#VALUE!错误?
怎样才能显示正确的计算结果【即:D列显示C列的十位数,E列显示C列的个位数;G列显示F列的十位数,H列显示F列的个位数】
代码如下【红色部分是我新添加的代码】:
Function WENLENG(rng As Range, x, Optional z = 0)
Dim ar, br, cr, i, j, k, y 'x=1温 x=2冷
ar = rng: ReDim br(1 To UBound(ar), 1 To 2)
ReDim cr(1 To UBound(ar), 0)
Set d = CreateObject("scripting.dictionary")
Set b = CreateObject("scripting.dictionary")
For k = UBound(ar) To 1 Step -1
If ar(k, 1) <> "" Then Exit For
cr(k, 0) = ""
Next
If Len(ar(k, 1)) = 2 Then y = 2
For i = 1 To k
br(i, 1) = Mid(ar(i, 1), 1, 1)
If y = 2 Then br(i, 2) = Mid(ar(i, 1), 2, 1)
If i > 1 Then
d.RemoveAll
For j = i To 1 Step -1
If br(j, 1) <> "" Then d(br(j, 1)) = ""
If d.Count = 2 Then Exit For
Next
If y = 2 Then
b.RemoveAll
For j = i To 1 Step -1
If br(j, 1) <> "" Then b(br(j, 2)) = ""
If b.Count = 2 Then Exit For
Next
If x = 1 And d.Count > 1 And b.Count > 1 Then cr(i, 0) = d.keys()(1) & b.keys()(1)
If x = 2 And d.Count > 1 And b.Count > 1 Then cr(i, 0) = _
(3 - d.keys()(0) - d.keys()(1)) & (3 - b.keys()(0) - b.keys()(1))
Else
If x = 1 And d.Count > 1 Then cr(i, 0) = d.keys()(1)
If x = 2 And d.Count > 1 Then cr(i, 0) = 3 - d.keys()(0) - d.keys()(1)
End If
If d.Count < 2 Or br(i, 1) = "" Then cr(i, 0) = ""
If y = 2 And b.Count < 2 Then cr(i, 0) = ""
If y = 2 And z = 1 Then cr(i, 0) = --Left(cr(i, 0), 1)
If y = 2 And z = 2 Then cr(i, 0) = --Right(cr(i, 0), 1)
End If
Next
cr(1, 0) = "": WENLENG = cr
End Function
温码和冷码.zip
(26.73 KB, 下载次数: 11)
应该显示下面的结果:
|
|