Имею текст в ячейке, вида: 249234792762\\12412584935374\\1231242195982184\\3242374235882358
Он служит неким адресом строки, и я использую его в макросе.
Нужно средствами VBA (Mid? InStr? но я затрудняюсь сочинить формулу) получить кусок строки от ПЕРВОГО знака "\\" (включительно) до ВТОРОГО "\\" (не включительно), чтобы на выходе получилось: \\12412584935374
вообще строки у меня бывают разные, но во всех нужно именно от первого "\\" до второго "\\".
предполагаемый шаблон кода:
Код
Sub aaa()
Dim _
StrOld as String, _
StrNew as String
StrOld = 249234792762\\12412584935374\\1231242195982184\\3242374235882358 (или ссылка на ячейку - не важно)
StrNew = ...
Sub InMidStr1()
Dim s
s = "249234792762\\12412584935374\\1231242195982184\\3242374235882358"
MsgBox "\\" & Mid(s, 1, InStr(1, s, "\\", 1) - 1)
End Sub
Sub InMidStr2()
Dim s
s = "249234792762\\12412584935374\\1231242195982184\\3242374235882358"
MsgBox "\\" & Split(s, "\\")(0)
End Sub
вторым кодом легко можно получить любую часть строки. Но не лишним будет проверять - есть ли эти самые слеши вообще.
Изменено: Дмитрий Щербаков - 12.03.2018 11:35:07(что-то форум подглючивает...)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
БМВ, я знаю, что могу показаться немного наглым) но я правда стараюсь не лезть на форум с каждым вопросом. ... второй вариант мне больше подошёл, в исполнении Sanja
RazorBaze написал: что могу показаться немного наглым
я не об этом. Просто если вы были так близки указав нужные функции, то можно сделать следующий шаг. Пусть будет не эффективно, длинно , но Ваше!
Дмитрий Щербаков, Вы немного ошиблись, там нужна вторая группа, у Вас первая. Нужно считать и где начало и сколько выделять, что становится заморочно при наличии второго варианта, с поправкой на (1)/
БМВ написал: там нужна вторая группа, у Вас первая
Спасибо, проглядел. Тогда для первого кода так:
Код
Sub InMidStr1()
Dim s
s = "249234792762\\12412584935374\\1231242195982184\\3242374235882358"
MsgBox Mid(s, InStr(1, s, "\\", 1), InStr(InStr(1, s, "\\", 1) + 2, s, "\\", 1) - InStr(1, s, "\\", 1))
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Function Flesh$(text$)
With CreateObject("VBScript.RegExp"): .Pattern = "[^\\]+": .Global = True
Flesh = "\\" & .Execute(text)(1)
End With
End Function
Код
Function Flesh2$(text$)
With CreateObject("VBScript.RegExp"): .Pattern = "\\\\\d+(?=\\)"
Flesh2 = .Execute(text)(0)
End With
End Function