0

我有以下代码:

    Case "L"
     If UCase(Left(Dn, 3)) = "L/M" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 3.5



     ElseIf UCase(Left(Dn, 3)) = "LM$" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 3.5

ElseIf UCase(Left(Dn, 2)) = "LM" Then
 If IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
            If Mid(Dn, 4, 1) = "0" Then
            Dn.Offset(, 1) = Mid(Dn, 3, 2) + 3.5
            Else
            Dn.Offset(, 1) = Mid(Dn, 3, 2) + 0.35
           End If
            End If


 If IsNumeric(Mid(Dn, 4, 1)) And IsNumeric(Mid(Dn, 5, 1)) Then
            If Mid(Dn, 5, 1) = "0" Then
            Dn.Offset(, 1) = Mid(Dn, 3, 3) + 3.5
            Else
            Dn.Offset(, 1) = Mid(Dn, 3, 3) + 0.35
            End If
            End If


    ElseIf UCase(Left(Dn, 2)) = "L$" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 3, 2)) + 2

     ElseIf UCase(Left(Dn, 3)) = "LOW" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 2
    ElseIf UCase(Left(Dn, 3)) = "LO-" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 2
    ElseIf UCase(Left(Dn, 6)) = "LO MID" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 7, 3)) + 3.5



    ElseIf UCase(Left(Dn, 3)) = "LO " Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 2

    ElseIf UCase(Left(Dn, 5)) Like "L###S" Then
      If IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
        If Mid(Dn, 4, 1) = "0" Then
             Dn.Offset(, 1) = Mid(Dn, 2, 3) + 2
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2
        End If
        End If
     '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
    'ElseIf UCase(Left(Dn, 1)) = "L" Then
            'Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 2
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
            'ElseIf IsNumeric(Mid(Dn, 2, 1)) And IsNumeric(Mid(Dn, 3, 1)) Then
            'Dn.Offset(, 1) = IIf(Mid(Dn, 3, 1) = 0, Val(Mid(Dn, 2, 2)) + 2, Val(Mid(Dn, 2, 2)) + 0.2)

            'ElseIf IsNumeric(Mid(Dn, 2, 1)) Then
            'Dn.Offset(, 1) = IIf(IsNumeric(Mid(Dn, 2, 1) + Mid(Dn, 3, 1)), Val(Mid(Dn, 2, 3)) + 2, Val(Mid(Dn, 2, 1)) + 0.2)
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
       ElseIf UCase(Left(Dn, 5)) Like "L###S" Then
      If IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
        If Mid(Dn, 4, 1) = "0" Then
             Dn.Offset(, 1) = Mid(Dn, 2, 3) + 2
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2
        End If
        End If


    ElseIf UCase(Left(Dn, 4)) Like "L##S" Then
      If IsNumeric(Mid(Dn, 2, 1)) And IsNumeric(Mid(Dn, 3, 1)) Then
        If Mid(Dn, 3, 1) = "0" Then
             Dn.Offset(, 1) = Mid(Dn, 2, 2) + 2
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 2) + 0.2
        End If
        End If
        End If


      If IsNumeric(Mid(Dn, 2, 1)) Then
             Dn.Offset(, 1) = Val(Mid(Dn, 2, 2)) + 0.2
     End If

       'ElseIf UCase(Left(Dn, 4)) Like "L###" Then
           ' Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 0.2
    ' End If

我当前的代码输出如下:

*L111 --> 111.2
*L100 --> 100.2
*L100S --> 100.2
*L10S --> 12.2
*L12S --> 12.2

期望的输出如下:

*L111 --> 111.2
*L100 --> 100.2
*L100S --> 100
*L10S --> 12
*L12S --> 12.2

我不确定我做错了什么,任何帮助将不胜感激。

先感谢您。

4

2 回答 2

2

看起来最终的 If/Then 正在为您的所有五个输入添加 0.2,它应该:IsNumeric(Mid(Dn, 2, 1))对于您的所有输入都是正确的。

此代码可能会从使用 Select Case 语句而不是所有 Ifs 和 ElseIfs 中受益(在可读性、调试等方面)。

于 2012-11-16T16:32:23.843 回答
0

谢谢你的建议和帮助,但我设法解决了我自己的问题。

Case "L"
     If UCase(Left(Dn, 3)) = "L/M" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 3.5

     ElseIf UCase(Left(Dn, 3)) = "LM$" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 3.5

ElseIf UCase(Left(Dn, 2)) = "LM" Then
 If IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
            If Mid(Dn, 4, 1) = "0" Then
            Dn.Offset(, 1) = Mid(Dn, 3, 2) + 3.5
            Else
            Dn.Offset(, 1) = Mid(Dn, 3, 2) + 0.35
           End If
            End If


 If IsNumeric(Mid(Dn, 4, 1)) And IsNumeric(Mid(Dn, 5, 1)) Then
            If Mid(Dn, 5, 1) = "0" Then
            Dn.Offset(, 1) = Mid(Dn, 3, 3) + 3.5
            Else
            Dn.Offset(, 1) = Mid(Dn, 3, 3) + 0.35
            End If
            End If


    ElseIf UCase(Left(Dn, 2)) = "L$" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 3, 2)) + 2

     ElseIf UCase(Left(Dn, 3)) = "LOW" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 2
    ElseIf UCase(Left(Dn, 3)) = "LO-" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 2
    ElseIf UCase(Left(Dn, 6)) = "LO MID" Then
            Dn.Offset(, 1) = Val(Mid(Dn, 7, 3)) + 3.5

    ElseIf UCase(Left(Dn, 3)) = "LO " Then
            Dn.Offset(, 1) = Val(Mid(Dn, 4, 2)) + 2

    ElseIf UCase(Left(Dn, 5)) Like "L###S" Then
      If IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
        If Mid(Dn, 4, 1) = "0" Then
             Dn.Offset(, 1) = Mid(Dn, 2, 3) + 2
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2

        End If
        End If

   ElseIf UCase(Left(Dn, 4)) Like "L##S" Then
      If IsNumeric(Mid(Dn, 2, 1)) And IsNumeric(Mid(Dn, 3, 1)) Then
        If Mid(Dn, 3, 1) = "0" Then
           Dn.Offset(, 1) = Mid(Dn, 2, 2) + 2
       Else
          Dn.Offset(, 1) = Mid(Dn, 2, 2) + 0.2
       End If
        End If


   ElseIf UCase(Left(Dn, 4)) Like "L###" Then
      If IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
        If Mid(Dn, 4, 1) = "0" Then
             Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2

        End If
        End If

   ElseIf UCase(Left(Dn, 3)) Like "L##" Then
      If IsNumeric(Mid(Dn, 2, 1)) And IsNumeric(Mid(Dn, 3, 1)) Then
        If Mid(Dn, 3, 1) = "0" Then
           Dn.Offset(, 1) = Mid(Dn, 2, 2) + 0.2
       Else
          Dn.Offset(, 1) = Mid(Dn, 2, 2) + 0.2
       End If
       End If

    End If
于 2012-11-16T16:38:08.713 回答