Страницы: 1
RSS
Вставка символа в определенное место строки.
 
Доброго время суток, уважаемые форумчане!  
Задача такова.  
В каждую строку на листе нужно вставить символ # после 5 знака в строке.  
Либо вместо второго, третьего пробела в строке вставка определенного символа.  
Спасибо!
 
1. Можно аналогичную формулу протянуть, ну а по месту макрос:  
 
Sub tt()  
Dim rr As Range  
For Each rr In [a1:a10]
rr.Value = Left(rr.Value, 5) & "#" & Right(rr.Value, Len(rr.Value) - 5)  
Next  
End Sub  
 
Это если в строке одну ячейку нужно преобразовать.
 
C пробелами такая заготовка, обрабатывает выделенную ячейку:  
 
Sub ttt()  
Dim x&, y&, z&, temp$  
temp = Selection.Value  
x = InStr(temp, " ")  
y = InStr(x + 1, temp, " ")  
z = InStr(y + 1, temp, " ")  
Mid(temp, y, 1) = "#"  
Mid(temp, z, 1) = "#"  
Selection.Value = temp  
End Sub  
 
Может быть можно проще, не знаю, раньше не делал...
 
{quote}{login=Hugo}{date=18.08.2011 11:38}{thema=}{post}C пробелами такая заготовка, обрабатывает выделенную ячейку:  
 
Работает здорово!Спасибо!  
Вот только как быть с большим количеством строк ~4000
 
Например:  
 
Sub tttt()  
Dim rr As Range, x&, t$  
For Each rr In Range("A1", Cells(Rows.Count, 1).End(xlUp)).Cells  
   t = rr.Value  
   x = InStr(t, " ")  
   Mid(t, x + 1) = Replace(t, " ", "#", x + 1, 2, 1)  
   rr.Value = t  
Next  
End Sub
 
Или так, работают с выделенным диапазоном.  
> вставить символ # после 5 знака в строке  
 
Sub Mishgun1()  
Selection = Evaluate("INDEX(LEFT(" & Selection.Address & ",5)&""#""&MID(" & Selection.Address & ",6,999),)")  
End Sub  
 
> вместо второго, третьего пробела в строке вставка определенного символа  
 
Sub Mishgun2()  
Selection = Evaluate("INDEX(SUBSTITUTE(SUBSTITUTE(" & Selection.Address & ","" "",""#"",2),"" "",""#"",2),)")  
End Sub
 
Точно, у Replace ведь есть Count!  
Когда это всё запомнится... :)
 
Например:  
 
Sub probel2()  
Dim r As Range, t$, s$  
For Each r In Range("A1", Cells(Rows.Count, 1).End(xlUp)).Cells  
   t = r.Value  
   If InStr(t, "-") < 6 And InStr(t, "-") > 0 Then  
       s = t  
   Else  
       s = Replace(t, " ", "@", 1, 1, 1)  
   End If  
   t = Replace(s, " ", "#", 1, 2, 1)  
   r.Resize(, 3) = Split(t, "#")  
   r = Replace(r, "@", " ")  
Next  
End Sub
 
Упс, был вопрос и куда-то пропал.
 
серия в 1столбец, номер во 2й!остальное в 3-й
 
Да аноним, одобряем, делайте! :)  
 
 
Если серьёзно, то можно на RegExp сделать, например такую UDF использовать (автора не записал, извиняйте):  
 
Function FindDigits(ByVal txt$, ByVal DigitsCount%) As String  
   ' ищет в строке txt$ подстроку цифр длиной DigitsCount%  
   Dim RegExp As Object  
   Set RegExp = CreateObject("VBScript.RegExp"): RegExp.Global = True  
   RegExp.Pattern = "[\D]": txt$ = " " & RegExp.Replace(txt$, " ") & " "
   RegExp.Pattern = " [\d]{" & DigitsCount% & "} "
   If RegExp.test(txt$) Then FindDigits = Trim$(RegExp.Execute(txt$)(0).Value)  
End Function  
 
Только там есть 2 ячейки, где номера по 5 знаков - это дополнительная сложность...  
 
Ну или кодом ищем положение 5 цифр подряд, по этому месту делаем первый разрез, по первому пробелу дальше - второй.
 
{quote}{login=nilem}{date=23.08.2011 10:33}{thema=}{post}Упс, был вопрос и куда-то пропал.{/post}{/quote}Правильно пропал - не по теме был вопрос.
Страницы: 1
Читают тему
Наверх