Function fq(ByVal v As Long) As Long
Dim l As Long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 1, 3, 5, 2, 6
fq = fq + l End Select
Wend
End Function Function fw(ByVal v As Long) As Long
Dim l As Long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 1, 2, 5, 7, 0
fw = fw + l
End Select
Wend
End Function Function fl(ByVal v As Long) As Long
Dim l As Long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 1, 2, 6, 9, 0
fl = fl + l
End Select
Wend
End Function
这3组代码有那么多地方重复的,如何优化成一个
像这样的Case 1, 3, 5, 2, 6
fq = fq + l
Case 1, 2, 5, 7, 0
fw = fw + l
Case 1, 2, 6, 9, 0
fl = fl + l
还要这样各式的,因为好修改
Dim l As Long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 1, 3, 5, 2, 6
fq = fq + l End Select
Wend
End Function Function fw(ByVal v As Long) As Long
Dim l As Long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 1, 2, 5, 7, 0
fw = fw + l
End Select
Wend
End Function Function fl(ByVal v As Long) As Long
Dim l As Long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 1, 2, 6, 9, 0
fl = fl + l
End Select
Wend
End Function
这3组代码有那么多地方重复的,如何优化成一个
像这样的Case 1, 3, 5, 2, 6
fq = fq + l
Case 1, 2, 5, 7, 0
fw = fw + l
Case 1, 2, 6, 9, 0
fl = fl + l
还要这样各式的,因为好修改
Function fq(ByVal v As Long,byval type as integer) As Long
Dim l As Long
dim fa as long,fb as long,fc as long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 1, 3, 5, 2, 6
fa = fa + l
Case 1, 2, 5, 7, 0
fb = fb + l
Case 1, 2, 6, 9, 0
fc = fc + l
End Select
Wend
select case type
case 1
fq=fa
case 2
fq=fb
case 3
fq=fc
end select
End Function
Dim l As Long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 0 To 9
xx = xx + l
End Select
Wend
End Function
其实我的意思大概就是这个意思
Function fq(ByVal v As Long) As Long
Dim l As Long
While v > 0
l = v Mod 10
v = v \ 10
Select Case l
Case 1, 3, 5, 2, 6
fq = fq + l
Case 1, 2, 5, 7, 0
fw = fw + l
Case 1, 2, 6, 9, 0
fl = fl + l End Select
Wend
End Function
现在Function fq(ByVal v As Long) As Long,这句只定义了一个fq,现在调用fq好使,其他fw和fi并没有定义,所以在调用fw和fi时错误
更改以后需要通过引用方式调用参数来直接返回3个值:
Sub Fqwl(ByVal v As Long, Fq as long, Fw as long, Fl as long)
Dim I As Long
While v > 0
I = v Mod 10
If I=1 Or I=3 Or I=5 Or I=2 Or I=6 then Fq = Fq + l
If I=1 Or I=2 Or I=5 Or I=7 Or I=0 then Fw = Fw + l
If I=1 Or I=2 Or I=6 Or I=9 Or I=0 then Fl = Fl + l
End Function 调用:
Fq=1
Fw=1
Fl=1
Fqwl 99, Fq, Fw, Fl
调用之后:
Fq=1
Fw=1
Fl=2你原来3个函数中的 v = v \ 10
这一句根本就是没用的.所以去掉了
Sub Fqwl(ByVal V As Long, Fq as long, Fw as long, Fl as long)
Dim I As Long
Do While v > 0
I = v Mod 10
If I=1 Or I=3 Or I=5 Or I=2 Or I=6 then Fq = Fq + l
If I=1 Or I=2 Or I=5 Or I=7 Or I=0 then Fw = Fw + l
If I=1 Or I=2 Or I=6 Or I=9 Or I=0 then Fl = Fl + l
V=V\10
Loop
End Function 调用方式一样:
Fqwl 9876,Fq,Fw,Fl
调用完成之后,Fq,Fw,Fl的值就已经更改了最后说明一下,因为你的各个选项中有重复项,比如等于1,或者等于0,这种情况下,SELECT CASE只会执行第一个匹配的CASE, 后面几个会被忽略,
所以这里不应该用SELECT CASE,而直接用IF判断