2016-08-20 21 views
-1

我想使用替換函數僅替換MID的確切位置,而不是單元格中的所有事件。例子:
Ex。我想在位置6(第一次發生)替換+++++###****###中的###,而不是第二次。只能在VBA中的MID位置替換

For Each c In .Columns(3).Cells 
    If c.Value = "" Then 
    Else 
    Do While Len(c.Value) < 20 
     c.Value = c.Value & " " 
    Loop 
    transNum = Mid(c.Value, 6, 3) 
    c.Value = Replace(c.Value, Mid(c.Value, 6, 3), "") 
    c.Value = "0" & transNum & c.Value 
    End If 
    y.Sheets(1).Range("E" & c.Row) = y.Sheets(1).Range("E" & c.Row) & c.Value 
Next c 
+2

閱讀說明書。這是替換函數的基本用法 – dbmitch

回答

2

我不知道這是否會直接工作:

Mid(c.Value, 6, 3) = "" 

更新

您可以使用替換計數參數來限制內容替換次數:

​​

對於空間的填充,另一種選擇是https://stackoverflow.com/a/29541815/1383168

Dim s20 As String * 20 
s20 = c.Value 
c.Value = s20 

或類似

c.Value = c.Value & Space(20 - Len(c.Value)) 
+0

使用替換函數w/count參數;很棒! (感謝提示:空格也是) – drdb

2

Mid既是一個聲明又是一個函數。使用語句版本來做你想做的事。 Mid作爲一個聲明和一個函數分開幫助。

C = "CatDog" 
Mid(C, 2) = "Fr" 
MsgBox C 

Mid語句

替換在Variant(字符串)指定數量的字符的 與來自另一字符串中的字符變量。

語法

MID(STRINGVAR,開始[,長度)=串

Mid語句語法包含以下部分:

STRINGVAR必需。字符串變量名稱爲 修改。開始必需;變體(長)。字符位置 stringvar開始替換文本。

長度可選; 變體(長)。要替換的字符數。如果省略,則使用全部 字符串。

字符串必需。替換stringvar的部分 的字符串表達式。

備註

替換的字符的數量總是小於或等於所述數目 在STRINGVAR字符。

注意對字符串中包含的字節數據使用MidB語句。在 MidB語句中,start指定stringvar中的字節位置 ,其中替換開始,長度指定要替換的字節數 。

0

本節,

Do While Len(c.Value) < 20 
    c.Value = c.Value & " " 
Loop 

...也許是更好的,

c = Left(c.Value2 & Space(20), 20) 

The Replace function有一個參數來設置最大的替換次數。默認值爲-1(全部替換),但您可以輕鬆將其設置爲單個替換。

c = Replace(c.Value2, transNum, vbNullString, Count:=1)