2017-07-09 12 views
0

名前の変更スクリプトを作成していて、特定のファイル名がない限りすべて動作しています。どのプロジェクトでも共通しています。最初の文字が同じ場合は同じ値ですが、異なる式を実行します

ファイル名に基づいてファイル名の名前を変更しています。私は2つのファイルの長さを持っていますが、両方とも= 12ですが、異なる名前を付ける必要があります。最初の文字が=0,c,e"であるかどうかを調べるために、その1つのケースの中にif文を入れることはできますか?

Sub Convert() 
Application.ScreenUpdating = False 

Dim rng As Range, aCell As Range 
Dim val As String 
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 
     If val = Left(aCell, 1) = "0" Or "c" Or "e" Then 'Example: 01730101.pdf = S-173-0101.pdf 
     val = "S-" & Mid(aCell, 2, Len(aCell) - 9) & "-" & Mid(aCell, 5, Len(aCell) - 8) 
     Else 'Example: 173d0071.pdf = S-173-D7.pdf 
     val = "S-" & Left(aCell, Len(aCell) - 9) & "-" & Mid(aCell, 4, Len(aCell) - 8) 
     End If 
    Case 13 'Example: 173d00710.pdf = S-173-D7.pdf 
     val = "S-" & Left(aCell, Len(aCell) - 10) & "-" & Mid(aCell, 4, Len(aCell) - 9) 
    Case 15 'Example: 173d170c071.pdf = SD-170-C7.pdf 
     val = "SD-" & Left(aCell, Len(aCell) - 15) & Mid(aCell, 5, Len(aCell) - 12) & "-" & Mid(aCell, 8, Len(aCell) - 12) 
    Case 16 'Example: REF-173d0071.pdf = REF-173-D7.pdf 
     val = Left(aCell, Len(aCell) - 9) & "-" & (Mid(aCell, 8, Len(aCell) - 12)) 
    Case 17 'Example: REF173d00710.pdf = REF-173-D7.pdf 
     val = Left(aCell, Len(aCell) - 10) & "-" & (Mid(aCell, 8, Len(aCell) - 13)) 
On Error GoTo whoa 
    Case Else 
     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 
Call RemoveZero 
Call RemoveBadChar 
    Range("C1").Select 
    Worksheets("Rename").Columns("B").AutoFit 
    Application.ScreenUpdating = True 
whoa: 
MsgBox "Please delete any empty rows." 
ActiveSheet.Range("A1").End(xlDown).Offset(1).EntireRow.Select 
Application.ScreenUpdating = True 
Exit Sub 
End Sub 

任意のヘルプ

+0

のためのThxをはいあなたが実際にすることができます。すべてが私にはうまく見えます - あなたは問題がありますか? –

+0

@DougCoats 'Case 12 'の後の行に' Type mismatch、runtime error 13'が出る –

+1

同じ行に2つの等号を書くことはできません。これがエラーの理由です。 – Lowpar

答えて

2
Sub Convert() 
Application.ScreenUpdating = False 

Dim rng As Range, aCell As Range 
Dim val As String, check 
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 
     'I added a check here 
     check = Left(aCell, 1) 
     If check = "0" Or check = "c" Or check = "e" Then 'Example: 01730101.pdf = S-173-0101.pdf 
     val = "S-" & Mid(aCell, 2, Len(aCell) - 9) & "-" & Mid(aCell, 5, Len(aCell) - 8) 
     Else 'Example: 173d0071.pdf = S-173-D7.pdf 
     val = "S-" & Left(aCell, Len(aCell) - 9) & "-" & Mid(aCell, 4, Len(aCell) - 8) 
     End If 
     check = "" 
    Case 13 'Example: 173d00710.pdf = S-173-D7.pdf 
     val = "S-" & Left(aCell, Len(aCell) - 10) & "-" & Mid(aCell, 4, Len(aCell) - 9) 
    Case 15 'Example: 173d170c071.pdf = SD-170-C7.pdf 
     val = "SD-" & Left(aCell, Len(aCell) - 15) & Mid(aCell, 5, Len(aCell) - 12) & "-" & Mid(aCell, 8, Len(aCell) - 12) 
    Case 16 'Example: REF-173d0071.pdf = REF-173-D7.pdf 
     val = Left(aCell, Len(aCell) - 9) & "-" & (Mid(aCell, 8, Len(aCell) - 12)) 
    Case 17 'Example: REF173d00710.pdf = REF-173-D7.pdf 
     val = Left(aCell, Len(aCell) - 10) & "-" & (Mid(aCell, 8, Len(aCell) - 13)) 
On Error GoTo whoa 
    Case Else 
     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 
Call RemoveZero 
Call RemoveBadChar 
    Range("C1").Select 
    Worksheets("Rename").Columns("B").AutoFit 
    Application.ScreenUpdating = True 
whoa: 
MsgBox "Please delete any empty rows." 
ActiveSheet.Range("A1").End(xlDown).Offset(1).EntireRow.Select 
Application.ScreenUpdating = True 
Exit Sub 
関連する問題