Function Substring(Текст As String, Символ_разделитель As String, _ Начальный_Номер_фрагмента As Long, Конечный_Номер_фрагмента As Long) As String '--------------------------------------------------------------------------------------- ' Purpose : Выделяет из текста субстринг/и, ориентируясь по символам-разделителям ' Notes : Substring(текст; символ_разделитель; Начальный_Номер_фрагмента, Конечный_Номер_фрагмента), где ' текст - текст, который делим ' символ_разделитель - символ, который надо считать разделителем фрагментов ' Начальный_Номер_фрагмента - порядковый номер фрагмента, с которого нужна выборка ' Конечный_Номер_фрагмента - порядковый номер фрагмента, по который нужна выборка '--------------------------------------------------------------------------------------- On Error Resume Next Dim sArr() As String, li As Long sArr = Split(Application.Trim(Текст), Символ_разделитель) If Конечный_Номер_фрагмента > 0 Then Начальный_Номер_фрагмента = Начальный_Номер_фрагмента - 1 Конечный_Номер_фрагмента = Конечный_Номер_фрагмента - 1 For li = Начальный_Номер_фрагмента To Конечный_Номер_фрагмента Substring = IIf(li = Начальный_Номер_фрагмента, sArr(li), Substring & _ Символ_разделитель & sArr(li)) Next li Else Substring = Split(Application.Trim(Текст), _ Символ_разделитель)(Начальный_Номер_фрагмента - 1) End If End Function
[/vba]Для нерусских Экселей (на русских вероятно вместо "," нужно писать ";"): B2 =Substring(A2,"|",1,2)&"|" C2 =Substring(A2,"|",3,100) (если последний фрагмент всегда один, то можно писать Substring(A2,"|",3,3), если их количество неизвестно - то ставьте последний аргумент с запасом).
UDF:
[vba]
Code
Function Substring(Текст As String, Символ_разделитель As String, _ Начальный_Номер_фрагмента As Long, Конечный_Номер_фрагмента As Long) As String '--------------------------------------------------------------------------------------- ' Purpose : Выделяет из текста субстринг/и, ориентируясь по символам-разделителям ' Notes : Substring(текст; символ_разделитель; Начальный_Номер_фрагмента, Конечный_Номер_фрагмента), где ' текст - текст, который делим ' символ_разделитель - символ, который надо считать разделителем фрагментов ' Начальный_Номер_фрагмента - порядковый номер фрагмента, с которого нужна выборка ' Конечный_Номер_фрагмента - порядковый номер фрагмента, по который нужна выборка '--------------------------------------------------------------------------------------- On Error Resume Next Dim sArr() As String, li As Long sArr = Split(Application.Trim(Текст), Символ_разделитель) If Конечный_Номер_фрагмента > 0 Then Начальный_Номер_фрагмента = Начальный_Номер_фрагмента - 1 Конечный_Номер_фрагмента = Конечный_Номер_фрагмента - 1 For li = Начальный_Номер_фрагмента To Конечный_Номер_фрагмента Substring = IIf(li = Начальный_Номер_фрагмента, sArr(li), Substring & _ Символ_разделитель & sArr(li)) Next li Else Substring = Split(Application.Trim(Текст), _ Символ_разделитель)(Начальный_Номер_фрагмента - 1) End If End Function
[/vba]Для нерусских Экселей (на русских вероятно вместо "," нужно писать ";"): B2 =Substring(A2,"|",1,2)&"|" C2 =Substring(A2,"|",3,100) (если последний фрагмент всегда один, то можно писать Substring(A2,"|",3,3), если их количество неизвестно - то ставьте последний аргумент с запасом).Hugo