2016-09-08 5 views
0

ファイルへのパスが多いスプレッドシートがあります。私は、次の式を使用して、列の各セルの最後の "\"を置き換えます。これをマクロに変更して、各列をペーストしてドラッグする必要はありません。最後に出現した文字を置換する

=SUBSTITUTE(K2,"\","?",LEN(K2)-LEN(SUBSTITUTE(K2,"\",""))) 

私はマクロを記録しようとしましたが、これが唯一つのセルではなく動作し、アクティブセルがO列

Sub Macro4() 
ActiveCell.FormulaR1C1 = _ 
    "=SUBSTITUTE(RC[-4],""\"",""?"",LEN(RC[-4])-LEN(SUBSTITUTE(RC[-4],""\"","""")))" 
Range("O2").Select 
End Sub 

にある場合にのみ、私は、これはO列に値を入れている必要があります活動セルが何であるかにかかわらず、K2で始まる各空でないKについてO2から開始する。ここで

+0

なぜ、あなたの範囲を定義し、各セルのためにループのためにしませんか? – Tyeler

+0

Kの最後の行を 'lstRw'のような変数に置きます。' Range( "O2:O"&lstrw).FormulaR1C1 = _ "= SUBSTITUTE(RC [-4]、" "、" "、"? ""、LEN(RC [-4]) - LEN(SUBSTITUTE(RC [-4]、 "\" "、" ""))) "'最後の行の検索方法ここをクリックしてください:http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba –

+1

ありがとう、私の結果を投稿しようとします。 – Nolemonkey

答えて

1

別のアプローチである:

Sub LastSlash() 
    Dim N As Long, i As Long, rng As Range, r As Range 
    Dim rc As Long, L As Long, j As Long 

    rc = Rows.Count 
    Set rng = Intersect(ActiveSheet.UsedRange, Range("K2:K" & rc)) 
    N = Cells(rc, "K").End(xlUp).Row 

    For Each r In rng 
     s = r.Value 
     L = Len(s) 
     If InStr(1, s, "\") > 0 Then 
      For j = L To 1 Step -1 
       If Mid(s, j, 1) = "\" Then 
        Mid(s, j, 1) = "?" 
        Exit For 
       End If 
      Next j 
     End If 
     r.Offset(0, 4).Value = s 
    Next r 
End Sub 

enter image description here

+0

あなたは 'L'変数を' L = InStrRev(s、 "\") 'に少し変更することができます。' If ... End If'ブロックを 'If L> 0に置き換えます。次にMid(s、 L、1)= "?" ' –

+0

@ DarrenBartrup-Cookありがとうございました。しかし、私は** L **が最初の* *最後のスラッシュよりスラッシュ............ –

+0

それは魅力的なように機能しました。どうも! – Nolemonkey

関連する問題