试图在select的情况下一起join3个陈述

我正在试图将这三个陈述一起join。 我可以得到两个工作,但不是第三个。

检查是否看第5个字符= a,b,c,d。

Check0正在查看字符2-9是否都是数字。

Check3正在查看前3个字符是否是数字。

期望的效果

之前 > 之后

检查0 e01730101.pdf > S-173-0101

Check3 173d00510.pdf > S-173-D005

检查e173d0061.pdf > S-173-D006

现在Check0不工作。 当我运行代码时,似乎跳过了我的Case 13 Check0语句。 无论如何,我可以写这个,所以3个检查是不相互冲突?

Option Explicit Sub Convert() Application.ScreenUpdating = False Dim rng As Range, aCell As Range Dim val As String, Check, Check0, Check3 Dim LastRow As Long LastRow = Range("A" & Rows.Count).End(xlUp).Row Set rng = Range("A2:A" & LastRow) For Each aCell In rng.Cells Select Case Len(aCell) 'Case 12 left out Case 13 Check = Mid(aCell, 5, Len(aCell) - 12) If Check = "a" Or Check = "b" Or Check = "c" Or Check = "d" Then 'Existing Standard val = "S-" & Left(aCell, Len(aCell) - 13) & Mid(aCell, 2, Len(aCell) - 10) & "-" & Mid(aCell, 5, Len(aCell) - 9) Check0 = IsNumeric(Mid(aCell, 2, Len(aCell) - 5)) '|||PROBLEM||| ElseIf Check0 = True Then 'Existing Three Line Diagrams val = "S-" & Left(aCell, Len(aCell) - 10) & "-" & Mid(aCell, 4, Len(aCell) - 9) End If Check3 = IsNumeric(Left(aCell, 3)) If Check3 = True Then 'Standard after page 9 val = "S-" & Mid(aCell, 1, Len(aCell) - 10) & "-" & Mid(aCell, 4, Len(aCell) - 9) End If Check = "" Check0 = "" Check3 = "" 'Case 14 left out Case Else 'All other pages val = "_Mod " & Left(aCell, Len(aCell) - 4) End Select val = UCase(val) val = val & " " & aCell.Offset(, 2) & aCell.Offset(, 3) aCell.Offset(, 1).Value = val Next Application.ScreenUpdating = True End Sub 

问题是你的Check0variables在你检查时没有被初始化。 最好先做三次检查,然后再执行If...ElseIf...

其次,这个expression式使用了inputstring的错误部分:

 val = "S-" & Left(aCell, Len(aCell) - 10) & "-" & Mid(aCell, 4, Len(aCell) - 9) 

我真的不明白你为什么使用Len(aCell) - something因为已知长度是13,所以Left(aCell, Len(aCell) - 13)是无用的,因为它是空string。

这里是一些其他优化( pos是一个Long )的更正:

  Case 13 Check = InStr("abcd", Mid(aCell, 5, 1)) Check0 = IsNumeric(Mid(aCell, 2, 8)) Check3 = IsNumeric(Left(aCell, 3)) pos = IIf(Check3, 1, _ IIf(Check, 2, _ IIf(Check0, 3, 0))) val = IIf(pos, "S-" & Mid(aCell, pos, 3) & "-" & Mid(aCell, pos+3, 4), "??")