0

以下のコードを使用していますが、次のステートメントが機能しません。

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

コードは上記のステートメントから何も実行しません。

Case "L"


 **If UCase(Left(Dn, 2)) = "LM" 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, 3, 3) + 3.5
           Else
            Dn.Offset(, 1) = Mid(Dn, 3, 3) + 0.35
           End If
            End If

    ElseIf IsNumeric(Mid(Dn, 4, 1)) And IsNumeric(Mid(Dn, 5, 1)) Then
        If Mid(Dn, 5, 1) = "0" And Mid(Dn, 4, 1) = "0" Then
        If Dn.Offset(, 3) = "CMBS" Then
             Dn.Offset(, 1) = Mid(Dn, 3, 3) + 20
        Else
        Dn.Offset(, 1) = Mid(Dn, 3, 3) + 2
        End If

        ElseIf UCase(Left(Dn, 6)) Like "LM###S" Then

        Dn.Offset(, 1) = Mid(Dn, 3, 3) + 2
        Else
        Dn.Offset(, 1) = Mid(Dn, 3, 3) + 0.2
        End If**



    ElseIf 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)) = "L$" Then
        Dn.Offset(, 1) = Val(Mid(Dn, 3, 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###H" Then
        Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 0.2
    ElseIf UCase(Left(Dn, 4)) Like "L##H" Then
        Dn.Offset(, 1) = Val(Mid(Dn, 2, 2)) + 0.2
    ElseIf UCase(Left(Dn, 4)) Like "L#" Then
        Dn.Offset(, 1) = Val(Mid(Dn, 2, 2)) + 0.2
    ElseIf IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
        If Mid(Dn, 4, 1) = "0" And Mid(Dn, 3, 1) = "0" Then
            If Dn.Offset(, 3) = "CMBS" Then
                Dn.Offset(, 1) = Mid(Dn, 2, 3) + 20
            Else
                Dn.Offset(, 1) = Mid(Dn, 2, 3) + 2
            End If
        ElseIf UCase(Left(Dn, 5)) Like "L###S" Then
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 2
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2
        End If
    ElseIf IsNumeric(Mid(Dn, 3, 1)) And IsNumeric(Mid(Dn, 4, 1)) Then
        If Mid(Dn, 4, 1) = "0" And Mid(Dn, 3, 1) <> "0" Then
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2
        End If
    ElseIf UCase(Left(Dn, 3)) Like "L##" Then
        If IsNumeric(Mid(Dn, 2, 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

入力値 -->
lm10、LM120S、LM120 所望の出力 -->
13.5 123.5 120.35

この問題に関するヘルプをいただければ幸いです。

4

3 に答える 3

1

評価はVal(Mid(Dn, 2, 3))ゼロになります。M10は文字で始まるため、valプロセスが終了します。それはVal(Mid(Dn, 3, 2))

私はあなたのselect声明がであると仮定していますSelect Case UCase(Left(dn, 1))。テキストを使用していないUCase場合、caseステートメントのコードは実行されません。

于 2013-01-17T17:20:58.213 に答える
1

このコードをモジュールに貼り付けます

Public Function GetNumb(strString As String) As Double
    Dim strLen As Long, i As Long
    Dim Temp As String

    strLen = Len(strString): Temp = ""

    For i = 1 To strLen
        If (Mid(strString, i, 1) = "-") Then
            Temp = Temp & Mid(strString, i, 1)
        End If
        If (Mid(strString, i, 1) = ".") Then
            Temp = Temp & Mid(strString, i, 1)
        End If
        If (IsNumeric(Mid(strString, i, 1))) = True Then
            Temp = Temp & Mid(strString, i, 1)
        End If
    Next i

    If Len(Temp) = 0 Then
        GetNumb = 0
    Else
        GetNumb = CDbl(Trim(Temp))
    End If
End Function

次に、コードを変更します

Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 3.5

Dn.Offset(, 1) = GetNumb(Dn.Value) + 3.5

説明:関数GetNumbは文字列から数値を抽出するので、

  1. lm10 ~~> 10
  2. LM120S ~~> 120
  3. LM120 ~~> 120
于 2013-01-17T17:35:40.293 に答える
0

IF行の周りにいくつかのDebug.Printステートメントを配置して、次のように何が起こっているかを確認します。

Debug,Print Dn
If UCase(Left(Dn, 2)) = "LM" Then
    Debug,Print "hi"
    Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 3.5

最初の行のケース「L」は何をしていますか?コードがIFステートメントに到達するのをブロックされていますか?

于 2013-01-17T17:20:48.563 に答える