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
还要这样各式的,因为好修改

解决方案 »

  1.   

    我晕
    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 
      

  2.   

    Function xx(ByVal v As Long) As Long
    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
      

  3.   

    楼上几位老师地回答好象和我说的不一样
    其实我的意思大概就是这个意思
    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时错误
      

  4.   

    函数形式会有所改变,估计你原来的函数要调用3次,得到3个返回值.
    更改以后需要通过引用方式调用参数来直接返回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 
    这一句根本就是没用的.所以去掉了
      

  5.   

    哦,我上面写错了,忘记循环了,更正:
    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判断