Поиск символа в ячейках и подстановка сиволов через несколько знаков

Автор Vasuialsd, 30 марта 2019, 18:06

0 Пользователи и 1 гость просматривают эту тему.

Vasuialsd

Как реализовать макросом. Пример: |Текст #Текст2|Текст|Текст #Текст
Нужно найти в строке значения с # и подставить заместо "|" это "]"

bigor

Распишите подробнее, что вы хотите, лучше даже с примером
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Vasuialsd

Нужно из таких строк:
225/50 R17|225/50 R17 #245/45 R17|225/45 R18 #245/40 R18|225/45 R18|225/40 R19 #245/35 R19|225/40 R19 #255/35 R19
Получить такие:
[[225/50 R17],[[225/50 R17],[245/45 R17]],[[225/45 R18],[245/40 R18]],[225/45 R18],[[225/40 R19],[245/35 R19]],[[225/40 R19],[255/35 R19]]]

bigor

тут еще и запятые появились :) а каков принцип расстановки квадратных скобок? Где 1, где 2, а где-то и 3
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Vasuialsd

1) 225/50 R17| - [225/50 R17]
2) |225/50 R17 #245/45 R17| - [[225/50 R17],[245/45 R17]]
3) и так и так, главное надо заменить "|" на "[текст]",  и где есть "#" на "[[текст][текст]]""

JohnSUN

Добро пожаловать на форум!
Это не очень сложно, это можно сделать как-то так:
Sub test
Dim sTest As String, aResult As Variant, i As Long
sTest = "225/50 R17|225/50 R17 #245/45 R17|225/45 R18 #245/40 R18|225/45 R18|225/40 R19 #245/35 R19|225/40 R19 #255/35 R19"
aResult = Split(sTest, "|")
For i = LBound(aResult) To UBound(aResult)
aResult(i) = "[" &   Replace(aResult(i), " #", "],[") & "]"
Next i
aResult = "[" &   Join(aResult, "],[") & "]"
MsgBox ("Было  '" & sTest & "'" & Chr(10) & "Стало '" & aResult & "'")
End Sub
(Это без учёта последних показанных 1) и 2) - их я без пояснений просто не понял)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Vasuialsd

Благодарю, поправил 3 пункт. Знчение где нет # получаются [[скобки]], как сделать одинарные [скобки], а где есть # так [[скобки],[скобки]]

bigor

проверьте это:
Sub test
Dim sTest As String, aResult As Variant, i As Long
sTest = "225/50 R17|225/50 R17 #245/45 R17|225/45 R18 #245/40 R18|225/45 R18|225/40 R19 #245/35 R19|225/40 R19 #255/35 R19"
aResult = Split(sTest, "|")
For i = LBound(aResult) To UBound(aResult)
If InStr(aResult(i),"#")>0 then
aResult(i) = "[[" &   Replace(aResult(i), " #", "],[") & "]]"
Else
aResult(i) = "[" &  aResult(i) & "]"
end if
Next i
aResult =    "[" & Join(aResult, ",") & "]"
MsgBox ("Было  '" & sTest & "'" & Chr(10) & "Стало '" & aResult & "'")
End Sub
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

mikekaganski

Sub test
   sTest = "225/50 R17|225/50 R17 #245/45 R17|225/45 R18 #245/40 R18|225/45 R18|225/40 R19 #245/35 R19|225/40 R19 #255/35 R19"
   aSplitByPipe = Split(sTest, "|")
   For i = LBound(aSplitByPipe) To UBound(aSplitByPipe)
       aSplitByHash = Split(aSplitByPipe(i), "#")
       For j = LBound(aSplitByHash) To UBound(aSplitByHash)
           aSplitByHash(j) = Trim(aSplitByHash(j))
       Next j
       If (UBound(aSplitByHash) > LBound(aSplitByHash)) Then
           For j = LBound(aSplitByHash) To UBound(aSplitByHash)
               aSplitByHash(j) = "[" & aSplitByHash(j) & "]"
           Next j
       End If
       aSplitByPipe(i) = "[" & Join(aSplitByHash, "") & "]"
   Next i
   aResult = "[" & Join(aSplitByPipe, ",") & "]"
   MsgBox ("Было  '" & sTest & "'" & Chr(10) & "Стало '" & aResult & "'")
End Sub
С уважением,
Михаил Каганский

Vasuialsd

почти идеально :)
Как можно реализовать на активном листе?

bigor

Для столбца А текущего листа
Sub test2
Dim i&, r&

Sheet=ThisComponent.CurrentController.ActiveSheet

For r=0 to Sheet.getColumns().getByIndex(0).queryEmptyCells().getByIndex(Sheet.getColumns().getByIndex(0).queryEmptyCells().getCount()-1).getRangeAddress().StartRow
aResult = Split(Sheet.getCellByPosition(0, r).String, "|")
For i = LBound(aResult) To UBound(aResult)
If InStr(aResult(i),"#")>0 then
aResult(i) = "[[" &   Replace(aResult(i), " #", "],[") & "]]"
Else
aResult(i) = "[" &  aResult(i) & "]"
end if
Next i
aResult =  "[" & Join(aResult, ",") & "]"
Sheet.getCellByPosition(0, r).setString(aResult)
Next r
End Sub
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Vasuialsd

У вас самый активный и отзывчивый форум, Благодарю за помощь!