Заменить только в MID месте в VBA

excel vba excel-vba

3230 просмотра

3 ответа

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

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
Автор: hmnd Источник Размещён: 08.11.2019 10:54

Ответы (3)


2 плюса

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

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

Серединное заявление

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

Синтаксис

Mid (stringvar, start [, length]) = строка

Mid Утверждение синтаксис имеет следующие части:

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

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

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

замечания

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

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

Автор: user6737242 Размещён: 20.08.2016 05:32

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))
Автор: Slai Размещён: 20.08.2016 05:33

0 плюса

Эта секция,

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

... может быть лучше, как,

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

Функция Replace имеет параметр для установки максимального количества замен. По умолчанию -1(заменить все вхождения), но вы можете легко установить его на одну замену.

 c = Replace(c.Value2, transNum, vbNullString, Count:=1)
Автор: user4039065 Размещён: 20.08.2016 05:50
32x32