VBA Excel代码的输出不正确
我有以下代码:VBA Excel代码的输出不正确,excel,vba,Excel,Vba,我有以下代码: 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"
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
我不确定我做错了什么,任何帮助都将不胜感激
提前感谢。最后一个If/Then将向所有五个输入中添加0.2,这应该是:
IsNumeric(Mid(Dn,2,1))
对所有输入都是真的
使用Select Case语句(而不是所有Ifs和ELSEIF)可能会使此代码(在可读性、调试等方面)受益。感谢您的建议和帮助,但我设法找到了解决我自己问题的方法
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
你没有提供所有的代码。您的输出示例与您提供的代码不匹配。@DanielCook,感谢您的回复,对于不完整的信息,我深表歉意。代码非常长且复杂,因此我只粘贴了case L变量。我希望这能澄清问题。任何帮助和指导都将不胜感激。非常感谢您的回复,是的,您是对的,最终的if语句超过了其他if条件,因此我使用了like函数来解决我的问题。再次感谢你的时间和帮助。如果你想感谢他,你应该接受这个答案。