Страницы: 1
RSS
VBA Замена символа 'звёздочка' в строке (Replace *)
 
Всем добрый вечер!
Есть колонка с  числами 1234********9876, где содержатся 4 цифры в начале и конце, а в середине 8 звёздочек.
Задача такая: заменить 8 звёздочек на 4 через макрос.
Была попытка заменить через Replace с использованием ~ тильды, т. к. * воспринимается как любой символ в синтаксисе:  но в итоге  какие комбинации я не ставил по типу replace what: ~******** replacement: **** , выдаёт либо 1234**** без последних цифр в конце, либо вообще любую кракозябру, но не то, что надо)
Код  и вариации не могу прикрепить, т. к. тестил на работе.
Почему подумал через replace, потому что думал убить звезды через выбор всего диапазона, другие варианты предполагаю потребуют цикла, а кол-во строк в исходном файле очень не малое и там требуется много манипуляций помимо этого
Вопрос такой: возможно это реализовать через replace? (Может есть какие то скрытые Шаолинские техники) или есть вариант, который с минимальным ходом решит эту задачу?
Буду премного благодарен)  
Изменено: Sanja - 02.11.2024 02:24:51
 
Вам обязательно макрос или формулами тоже можно?
Формула
Код
=ЛЕВСИМВ(A1;8)&ПРАВСИМВ(A1;4)

Подойдёт?
Изменено: DAB - 01.11.2024 23:05:28
 
Макросом, так как сам файл им обрабатывается, там ещё куча процедур предусмотрено помимо этого(
 
Xardas1313, Предположим что
Цитата
Xardas1313 написал:
Есть колонка с  числами
это колонка A то на основе формулы предоставленную вам от DAB
Код
Option Explicit

Sub VBA_ReplaceFor_Xardas1313()
    Dim i           As Long

    For i = 1 To ThisWorkbook.Worksheets("Sheet1").Cells(ThisWorkbook.Worksheets("Sheet1").Rows.Count, "A").End(xlUp).Row

        If ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value <> "" Then
            ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value = Left(ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value, 8) & Right(ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value, 4)
        End If

    Next i

End Sub
Далее сами сможете под себя настроить код, он примитивный и очень простой. Удачи.
 
Вот такой шаблон ~*~*~*~* заменит 4 звездочки, НО, т.к. у Вас их 8 (кратно 4м) замена в каждой строке будет происходить дважды
Можно так, как вариант
Код
Sub Replace_4_Stars()
Application.ScreenUpdating = False
  Cells.Replace What:="~*~*~*~*~*", Replacement:="", LookAt:=xlPart
  Cells.Replace What:="~*~*~*", Replacement:="****", LookAt:=xlPart
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Спасибо! Оба решения интересные, но  с replace прям то, что нужно) .
Только возник один ньюанс, о котором я совсем забыл упомянуть. В столбце в некоторых строках уже есть данные с 4 звёздочками, и при прогонке кода от Sanja он меняет 4 звезды на 5). Как это можно учесть при замене?  
 
Попробовал так, сработало вроде)

Cells.Replace What:="~*~*~*~*~*~*~*~*", Replacement:="****", LookAt:=xlPart
 
Кстати, чтобы не запутаться в кол-ве символов в связке "~*", можно сделать так:
Код
    Dim s$
    s = Replace(String(8, "~"), "~", "~*")
    Cells.Replace What:=s, Replacement:="****", LookAt:=xlPart
число 8 - это кол-во повторов нужного текста.
Replace нужен, т.к. String создает строку на основании только одного символа.
Или можно использовать функцию листа ПОВТОР:
Код
s = Application.Rept("~*", 8)
но будет работать только в Excel.
Изменено: Дмитрий(The_Prist) Щербаков - 02.11.2024 10:41:48
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Отлично, всем большое спасибо за помощь!!!  
 
Цитата
Xardas1313 написал:
Только возник один ньюанс
Код что я вам дал отлично справляется и с
Цитата
Xardas1313 написал:
есть данные с 4 звёздочками
Пробуйте.
Страницы: 1
Наверх