Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Как разнести содержание ячейки в несколько

Автор VladKomp, 15.11.2011, 09:54:45

« назад - далее »

VladKomp

Добрый всем день!
Люди, прошу помощи в решении задачки.
Конкретно, как разбить содержание ячеек колонки №3 "учебные предметы" и последовательно расположить в ячейках колонок 7 - 16?
Решить эту задачу пробовал: Данные/Текст по столбцам/...
Получилось, НО:
во-первых, содержание в разбитых ячейках не меняется с изменением содержания "родной" ячейки;
во-вторых, этот способ не работает, если "родная" ячейка содержит ссылку на ячейку другого Листа.
Файлик с примером прикрепляю.

vikttur

=ЕСЛИ(ДЛСТР($C5)-ДЛСТР(ПОДСТАВИТЬ($C5;",";))<СТОЛБЕЦ(A1);"";ПСТР($C5;ПОИСК("/";ПОДСТАВИТЬ(","&$C5&",";",";"/";СТОЛБЕЦ(A1)));ПОИСК("/";ПОДСТАВИТЬ(","&$C5&",";",";"/";СТОЛБЕЦ(B1)))-ПОИСК("/";ПОДСТАВИТЬ(","&$C5&",";",";"/";СТОЛБЕЦ(A1)))-1))
На основе формулы DV&МСН:
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(","&$C5;",";ПОВТОР(" ";99));СТОЛБЕЦ(A1)*99;99))

Пытливый

#2
Макросом (см.лист в книге с именем "ПРИМЕР")
Важно: для корректной работы макроса в столбце С кроме табличных данных "ничего не надо сувать"! :О)
Шапка таблицы - в 4 строке (т.е. с 5 строки чтоб уже данные находились).
Принцип работы макроса:
1. Определяем последнюю заполненную ячейку в столбце С.
2. В столбце С перебираются ячейки с 5 строки и по последнюю заполненную. Данные из ячеек разбиваются на отдельные значения по признаку отделенности между собою запятой. (цикл)
3. Каждое отдельное значение заносится в ячейку столбца таблицы, начиная с столбца G (цикл)
4. На листе нарисована красивая стрелка с побуждающей надписью.

Если стрелка не нужна (даже такая красивая), - запускайте макрос руками (Alt+F8). Работает, даже если в ячейках столбца С не значения, а ссылки на др.ячейки.

Текст макроса:
Sub VladKomp()
Dim lngI As Long
Dim lngJ As Long
Dim strArr() As String
With Worksheets("ПРИМЕР")
   For lngI = 5 To .Cells(Rows.Count, 3).End(xlUp).Row
   Erase strArr()
       strArr = Split(.Cells(lngI, 3), ",")
       For lngJ = LBound(strArr) To UBound(strArr)
           .Cells(lngI, 7 + lngJ).Value = Trim(strArr(lngJ))
       Next lngJ
   Next lngI
End With
End Sub

VladKomp

Огромное спасибо за помощь!
Безукоризненно работают макросы, предложенные Пытливым.
Хорошо работает вторая формула на основе DV&МСН, написанная vikttur.
Первая формула длинновата и требует, чтобы и в конце текста в исходной ячейке стояла запятая - тогда всё распознается полностью.
Еще раз - спасибо, ставлю по +.

Яндекс.Метрика Рейтинг@Mail.ru