Консультация № 146306
07.10.2008, 10:17
0.00 руб.
0 4 2
Здравствуйте!
У меня такой вопрос: можно ли в Excell создать какую-нибудь функцию или макрос, чтоб она одну строку в ячеке разбивала на несколько ячеек по запятой?
Например, есть ячейка со строкой "http://localhost/,970823,970823,1,338817227.000000", надо, чтоб было 5 ячеек со строками "http://localhost/", "970823", "970823", "1" и "338817227.000000". Если возможно, то как это реализовать?
Заранее благодарен.

Обсуждение

Неизвестный
07.10.2008, 12:03
общий
это ответ
Здравствуйте, Козьмин Сергей Олегович!
Можно при помощи макроса
Есть хороший сайт по Excell, там Вы найдете также много интерестного
а по этой ссылке http://www.planetaexcel.ru/tips.php?PHPSESSID=e2b9cb97d7501ec33cf116bd380791d9
найдите "Делим текст на куски", там ответ на Ваш вопрос.
давно
Модератор
137394
1850
07.10.2008, 13:18
общий
это ответ
Здравствуйте, Козьмин Сергей Олегович!
Макрос в приложении.
Макрос1. В зависимости от параметра Sdvig, он разделит исходную клетку начиная с исходной клетки (при Sdvig=0, исходное содержимое при этом пропадёт), либо начиная с соседней (Sdvig=1), либо со сдвигом на любую другую клетку вправо (а если Sdvig<0, то и влево, если исходная клетка в середине таблицы)
Идея функции по ссылке, указанной Козьмин Сергей Олегович, имеет тот недостаток, что надо этих функций написать в строку не менее, чем ячеек, в которые разбиваем исходный текст. Хорошо, если это заведомо известно.
Моему макросу всё равно, на сколько ячеек бьём текст.
Так что здесь еще не известно, что удобнее. Решать Вам.

Макрос2. То же, что и макрос1, но работает с выделенным диапазоном в столбце. Можно спокойно пользоваться и для одной ячейки.

Приложение:
Sub Макрос1()
' Макрос разбивает содержимое активной ячейки по разделителю вправо на соседние ячейки

S = "," ' S - символ разделителя
Sdvig = 1 ' На сколько ячеек вправо сдвигаем начало разбиения ячейки

' содержимое без разделителя - это содержимое на клетку
' в содержимом могут быть любые символы кроме разделителя, или никаких

Исходник = ActiveCell
N = Len(Исходник)

If N > 0 Then
Found = True
i = 0
Do While Found
m = InStr(Исходник, S)
Found = m <> 0
If Found Then
ActiveCell.Offset(0, Sdvig + i) = Mid(Исходник, 1, m - 1)
i = i + 1
Исходник = Mid(Исходник, m + 1, N)
N = Len(Исходник)
If N = 0 Then Exit Do
End If
Loop
If N <> 0 Then ActiveCell.Offset(0, Sdvig + i) = Исходник
End If

End Sub

Sub Макрос2()
' Макрос разбивает содержимое выделенных ячееки по разделителю вправо на соседние ячейки

S = "," ' S - символ разделителя
Sdvig = 1 ' На сколько ячеек вправо сдвигаем начало разбиения ячейки

' содержимое без разделителя - это содержимое на клетку
' в содержимом могут быть любые символы кроме разделителя, или никаких

Begin = Selection.Resize(1, 1).Address
nRows = Selection.Rows.Count

For j = 1 To nRows

Исходник = Range(Begin).Offset(j - 1, 0)
N = Len(Исходник)

If N > 0 Then
Found = True
i = 0
Do While Found
m = InStr(Исходник, S)
Found = m <> 0
If Found Then
Range(Begin).Offset(j - 1, Sdvig + i) = Mid(Исходник, 1, m - 1)
i = i + 1
Исходник = Mid(Исходник, m + 1, N)
N = Len(Исходник)
If N = 0 Then Exit Do
End If
Loop
If N <> 0 Then Range(Begin).Offset(j - 1, Sdvig + i) = Исходник
End If

Next

End Sub
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
07.10.2008, 15:13
общий
megaloman
А почему просто не загружать как csv файл(Ведь это класика загрузка файла с разделителями). ? А если уже так то почему не использовать метод Split()?
давно
Модератор
137394
1850
07.10.2008, 15:38
общий
Добавил в ответ макрос, обрабатывающий диапазон ячеек
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа