2016-08-20 10 views
-1

Я хотел бы использовать функцию замены только для замены в точном месте MID, а не во всех случаях в ячейке.
Ex. Я хочу заменить ### на +++++###****### в шестом положении (1-е место), а не на втором.Только заменить на место MID в VBA

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) = "" 

Update

Вы можете использовать Replace параметр счетчика, чтобы ограничить количество Заменяет:

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)) 
+0

Используется функция замены w/count; прекрасно работает! (Спасибо за подсказку re: пробелы тоже) – drdb

2

Mid является одновременно утверждение и функции. Используйте версию инструкции, чтобы делать то, что вы хотите. Mid помогает отдельно и как утверждение, и как функция.

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

Mid Заявление

Заменяет заданное количество символов в Variant (String) переменных с символами из другой строки.

Синтаксис

Середина (STRINGVAR, начать [, длина]) = строка

Midзаявление синтаксиса имеет следующие части:

STRINGVAR Обязательный. Имя переменной строки до изменить. start Обязательно; Вариант (длинный). Положение символа в stringvar, где начинается смена текста.

длина опционально; Вариант (длинный). Количество символов для замены. Если опущено, используется вся строка .

Обязательно. Строковое выражение, которое заменяет часть строки string.

Замечания

Количество символов замененных всегда меньше или равна количеству символов в STRINGVAR.

Примечание. Используйте инструкцию MidB с байтовыми данными, содержащимися в строке. В оператор MidB начинает указывать позицию байта в строке stringvar , где начинается замена, а длина указывает количество байтов на заменить.

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) 
Смежные вопросы