Всем добрый вечер! Есть колонка с числами 1234********9876, где содержатся 4 цифры в начале и конце, а в середине 8 звёздочек. Задача такая: заменить 8 звёздочек на 4 через макрос. Была попытка заменить через Replace с использованием ~ тильды, т. к. * воспринимается как любой символ в синтаксисе: но в итоге какие комбинации я не ставил по типу replace what: ~******** replacement: **** , выдаёт либо 1234**** без последних цифр в конце, либо вообще любую кракозябру, но не то, что надо) Код и вариации не могу прикрепить, т. к. тестил на работе. Почему подумал через replace, потому что думал убить звезды через выбор всего диапазона, другие варианты предполагаю потребуют цикла, а кол-во строк в исходном файле очень не малое и там требуется много манипуляций помимо этого Вопрос такой: возможно это реализовать через replace? (Может есть какие то скрытые Шаолинские техники) или есть вариант, который с минимальным ходом решит эту задачу? Буду премного благодарен)
это колонка 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
Далее сами сможете под себя настроить код, он примитивный и очень простой. Удачи.
Спасибо! Оба решения интересные, но с replace прям то, что нужно) . Только возник один ньюанс, о котором я совсем забыл упомянуть. В столбце в некоторых строках уже есть данные с 4 звёздочками, и при прогонке кода от Sanja он меняет 4 звезды на 5). Как это можно учесть при замене?
Кстати, чтобы не запутаться в кол-ве символов в связке "~*", можно сделать так:
Код
Dim s$
s = Replace(String(8, "~"), "~", "~*")
Cells.Replace What:=s, Replacement:="****", LookAt:=xlPart
число 8 - это кол-во повторов нужного текста. Replace нужен, т.к. String создает строку на основании только одного символа. Или можно использовать функцию листа ПОВТОР: