Страницы: 1
RSS
Разбиение строки в ячейке на несколько частей и запись этих частей в отдельные ячейки
 
Добрый день, коллеги.  
 
Посоветуйте, пожалуйста, по такому вопросу:  
 
У меня есть excel-файл, в ячейках А1, А2, ..., Аn содержится информация такого вида:  
2006.06.01,05:30,84.90,84.90,84.80,84.90,16  - это содержимое ячейки А1  
 
Подскажите, пожалуйста, как мне написать макрос, чтобы данные  2006.06.01   05:30   84.90   84.90   84.90  84.90   16  
располагались в отдельных ячейках A1, B1, C1, D1, E1, F1, G1?  
 
То есть, как мне элементы строки, где разделителем является запятая, расположить в отдельных ячейках?  
 
Заранее большое спасибо.
 
Данные-Текст по столбцам. Разделитель - запятая.
 
Спасибо большое, но к сожалению, в VBA не силен.  
Если будет возможность и время, прикрепите хотя бы примерный код, плз, чтобы разобраться.
 
Попробуйте включить макрорекордер и записать ту последовательность действий, которую Вам посоветовал kim
 
К VBA это не имеет никакого отношения, стандартное средство Excel.
 
А макрос на руборде :)
 
Т.е. в сумме уже 4? Потому что на руборде ответил я :)
 
Если это не разовое действие, то попробуйте такой макрос:  
Sub MacroSplit()  
Dim iLastRow As Long  
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
   For i = 1 To iLastRow  
       Cells(i, 2) = Split(Cells(i, 1), ",")(0)  
       Cells(i, 3) = Split(Cells(i, 1), ",")(1)  
       Cells(i, 4) = Split(Cells(i, 1), ",")(2)  
       Cells(i, 5) = Split(Cells(i, 1), ",")(3)  
       Cells(i, 6) = Split(Cells(i, 1), ",")(4)  
       Cells(i, 7) = Split(Cells(i, 1), ",")(5)  
       Cells(i, 8) = Split(Cells(i, 1), ",")(6)  
   Next  
End Sub
 
Получается - я уже пятый?
 
Ну я пошёл стандартным путём... А Ваш записал в закрома - красиво, и формат в этом случае Эксель не меняет.
 
Я себе позволил проверить :) и немного исправить:  
 
Option Explicit  
 
Sub MacroSplit()  
Dim iLastRow As Long, i As Long, li As Long, lCol As Long, sStr  
lCol = Val(InputBox("Введите номер столбца с данными", "Запрос данных", 1))  
If lCol = 0 Then Exit Sub  
iLastRow = Cells(Rows.Count, lCol).End(xlUp).Row  
For i = 1 To iLastRow  
sStr = Split(Cells(i, lCol), ",")  
For li = LBound(sStr) To UBound(sStr)  
Cells(i, lCol + li) = sStr(li)  
Next li  
Next i  
End Sub  
 
Интересный эффект - в массиве "84.90", а в ячейке уже 84,90... Почему так получается?
 
Друзья, спасибо огромное всем, кто откликнулся!!!  
Выручили по-настоящему!!!
 
{quote}{login=Hugo}{date=25.04.2010 12:30}{thema=}{post}в массиве "84.90", а в ячейке уже 84,90... Почему так получается?{/post}{/quote}  
Для VBA разделитель целой и дробной части - точка. Для Excel на листе - запятая.
 
{quote}{login=Юрий М}{date=25.04.2010 10:06}{thema=Re: }{post}{quote}{login=Hugo}{date=25.04.2010 12:30}{thema=}{post}в массиве "84.90", а в ячейке уже 84,90... Почему так получается?{/post}{/quote}  
Для Excel на листе - запятая.{/post}{/quote}Не всегда.
 
Правильно - какой стоит в настройках. В РФ принята запятая.
 
Ну а если мне надо, как было в массиве? Не понимаю, почему это происходит, и как отключить. Смотрю массив - одно значение, тут же в ячейке - другое...  
Пока писал, уже сделал:  
For li = LBound(sStr) To UBound(sStr)  
Cells(i, lCol + li).NumberFormat = "@"  
Cells(i, lCol + li) = sStr(li)  
Next li
 
Здравствуйте!  
Что необходимо добавить в коде, чтобы перенос был не по столбцам, А1, B1, C1, а по строкам, А1,А2,А3. Заранее спасибо.
Страницы: 1
Читают тему
Наверх