2016-09-08 126 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列從O2開始,每個非空K開始於K2,而不管活動單元是什麼。

+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 L> 0'代替你的'If ... End If'塊然後Mid(s, L,1)=「?」' –

+0

@ DarrenBartrup-Cook謝謝...................但我擔心** L **會找到**第一個* *斜線而不是**最後**斜線............ –

+0

這就像一個魅力。謝謝! – Nolemonkey

相關問題