Новости:

Подпишитесь на рассылку новых сообщений форума через службу рассылок: Subscribe.ru

Главное меню

Автоматическое "сцепление" ячеек

Автор TopLoader, 15.08.2012, 16:58

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

TopLoader

Приветствую!
Прошу помощи с Excel-ем.
Мне необходимо объединить текстовые значения нескольких ячеек в одну, если они являют собой одно предложение. Сложность в том, что иногда предложение может быть разбито на произвольное количество ячеек: от двух до восьми. Плюс сама эта таблица огромная, так что о ручном выполнении этих действий речи быть не может.

Как пробовал решить эту задачу я: исходя из того, что новое предложение в данной таблице всегда начинается с прописной буквы, я решил анализировать функцией, на сколько ячеек разбито предложение. Делал это следующим образом: если в соседней ячейке первая буква большая (СОВПАД(ЛЕВСИМВ(O8;1);ПРОПИСН(ЛЕВСИМВ(O8;1)))), в двух следующий первая буква — маленькая, а в следующей (то есть уже в четвертой) — снова большая, значить это предложение разбито на три ячейки. Сцепляем их вместе с пробелами: СЦЕПИТЬ(O8;" ";O9;" ";O10).

Результат сего действа можете увидеть в файле-вложении.

То есть я реализовал алгоритм для сцепления трех ячеек. Решил сделать то же самое для бОльшего количества путём многократной вложенности ЕСЛИ друг в друга. Увы, ничего не получилось: «Не удается ввести указанную формулу, поскольку она использует больше уровней вложенности, чем допускается текущим форматом»

И собственно вопрос: возможно ли как-то реализовать описанную мной задачу?

Быть может это делается как-нибудь вообще иначе, проще и быстрее? Каким-нибудь макросом или VBA-скриптом?

Буду благодарен любой помощи и советам!


Еще раз скриншот с графическим представлением того, что мне нужно получить, если по тексту понять задачу непросто:


_Boroda_

Если без макросов, то вот так можно.
Кошмар, конечно, но вдруг понравится
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

TopLoader

Цитата: _Boroda_ от 15.08.2012, 17:37
Если без макросов, то вот так можно.
Кошмар, конечно, но вдруг понравится

Ну результат такой, какой и нужен

Спасибо большое!  :)


Сейчас попробую понять, как это работает и перенесу на большую таблицу

Serge 007

#3
Цитата: TopLoader от 15.08.2012, 16:58
Быть может это делается как-нибудь вообще иначе, проще и быстрее? Каким-нибудь макросом или VBA-скриптом?
Макросом проще наверное...

Сделал формулой с доп. столбцом (можно и без него, но если таблица реально большая - будет тормозить).
Надо учитывать, что текст в ячейках не должен начинаться с буквы ё или цифр и быть только русским.
Как и в решении _Boroda_

ЗЫ Количество сцепляемых строк может быть не более 254

PSPS Хотя легко можно доработать и для ё, и для цифр, и для английского текста :)
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

TopLoader

Цитата: Serge 007 от 15.08.2012, 17:50
Цитата: TopLoader от 15.08.2012, 16:58
Быть может это делается как-нибудь вообще иначе, проще и быстрее? Каким-нибудь макросом или VBA-скриптом?
Макросом проще наверное...

Сделал формулой с доп. столбцом (можно и без него, но если таблица реально большая - будет тормозить).
Надо учитывать, что текст в ячейках не должен начинаться с буквы ё или цифр и быть только русским.
Как и в решении _Boroda_

ЗЫ Количество сцепляемых строк может быть не более 254

Отлично, спасибо большое!  :)

RAN

Макрос

Sub qqq()
    Dim arr, i&, k&
    arr = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
    Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).ClearContents
    On Error Resume Next
    For i = 1 To UBound(arr)
        If Left(arr(i, 1), 1) = UCase(Left(arr(i, 1), 1)) Then
            k = k + 1
            arr(k, 1) = arr(i, 1)
        Else
            arr(k, 1) = arr(k, 1) & " " & arr(i, 1)
        End If
    Next
    Range("A2").Resize(k) = arr
End Sub



Wasilic

Или так!
Макрос в примере.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Serge 007

Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

TopLoader

Цитата: Serge 007 от 15.08.2012, 23:45
Напрасные труды....
http://www.cyberforum.ru/ms-excel/thread638116.html
И чем же они, позвольте узнать, напрасны?
Если я задал вопрос одновременно на двух форумах, значит мне не стоит отвечать, ибо "напрасно"?

Мне предложили несколько способов — прекрасно.
Наиболее удобным мне показался метод Serge 007, предложенный здесь — в этой теме на этом форуме, этим методом я и воспользовался.