仅在VBA中的MID位置替换

时间:2016-08-20 05:02:26

标签: excel vba excel-vba

我想使用替换功能仅替换MID的确切位置,而不是单元格中的所有出现位置。
防爆。我想替换位置6(第一次出现)###中的+++++###****###而不是第二次出现。{/ p>

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

3 个答案:

答案 0 :(得分:2)

Mid既是陈述又是函数。使用语句版本来执行您想要的操作。 Mid作为一个陈述和一个函数分别作为帮助。

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

中期声明

     

替换Variant(String)中指定数量的字符   带有来自另一个字符串的字符的变量。

     

语法

     

Mid(stringvar,start [,length])= string

     

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

     

stringvar 必填。字符串变量的名称   修改。开始必需;变种(长)。人物的位置    stringvar 其中文本替换开始。

     

长度可选;   变种(长)。要替换的字符数。如果省略,全部   使用字符串。

     

字符串必填。替换部分的字符串表达式   stringvar。

     

<强>说明

     

替换的字符数始终小于或等于   stringvar中的字符数。

     

注意将MidB语句与字符串中包含的字节数据一起使用。在   MidB语句,start指定stringvar中的字节位置   替换开始的地方,length指定的字节数   取代

答案 1 :(得分:2)

我不确定它是否会直接起作用:

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

<强>更新

您可以使用Replace count参数来限制替换次数:

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

对于空间填充,另一种选择是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))

答案 2 :(得分:0)

本节,

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

......可能会更好,

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

Replace function有一个参数来设置最大替换次数。默认值为-1(替换所有出现次数),但您可以轻松将其设置为单个替换。

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