-1

特定の文字列に特定の値を追加するマクロがあります。ただし、現在ランタイムエラーが発生していますが、その理由がわかりません。

Case "L"

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

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

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


        'ElseIf UCase(Left(Dn, 1)) = "L" Then
        'Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 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 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
    Else
        Dn.Offset(, 1) = Val(Mid(Dn, 2, 3)) + 20
    End If
    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) + 20
        Else
            Dn.Offset(, 1) = Mid(Dn, 2, 3) + 0.2
        End If

    End If

入力データ

*vh105 --> 105.9
*h107 --> 107.8
*l107 --> 107.2
*lm106 --> 106.35
*lm106  
*l107   
*44 

この問題についての助けをいただければ幸いです。

4

1 に答える 1

0

Valが関数から適切な数値文字列を取得しないと思うので、Val(Mid(Dn,4,2))またはを分離しますMid(Dn,4,2)Mid

これを 2 行目と 3 行目の間で使用します。

Debug.Print Mid(Dn,4,2)
Debug.Print Val(Mid(Dn,4,2))

イミディエイト ウィンドウに表示される内容をお知らせください (存在しない場合は、[表示] > [イミディエイト ウィンドウ] に移動します)。

于 2012-11-06T11:59:56.990 に答える