Страницы: 1
RSS
Разбить большой заголовок в одном столбце на отрезки с обрезкой по пробелам.
 

Нужно разбить большой заголовок в одном столбце на отрезки (столбцы) не более 30 символов с обрезкой по пробелам.

Нужны функции в 3 столбцах.

Что функция 1 должна делать:

из большого заголовка брать интервал до 30ого символа. проверять - этот символ пробел или не пробел. если пробел - то резать исходную фразу на 30ом символе. если не пробел - то искать ближайший к 30ому символу пробел - и отрезать все, что после этого символа.

Что функция 2 должна делать:

искать окончание столбца 1 в исходной фразе. потом захватывать от нее (к примеру фраза в столбце один закончилась на 24 символе) промежуток еще в 30 символов. проверять - этот символ пробел или не пробел. если пробел - то резать исходную фразу на 30ом символе. если не пробел - то искать ближайший к 30ому символу пробел - и отрезать все, что после этого символа.

Функция 3 = функция 2 для столбца 2

Помогите, пожалуйста, составить функции правильно.

Спасибо большое заранее!

 
helga2020,
Цитата
helga2020 написал:
должна делать
Цитата
helga2020 написал:
должна делать
а вы что для этого сделали? файл-пример, желаемый результат!?
Изменено: Mershik - 10.12.2019 15:35:26
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, есть длинные фразы. Мне нужно разбить их на столбцы не более чем по 30 символов, чтобы получилось примерно вот так (скрингшоты)
У самой у меня получается только просто разбить столбец по 30 символов, что не подходит, т.к. обрезаются слова.

Больше у меня ничего не получается, к сожалению, поэтому я здесь.
Изменено: helga2020 - 10.12.2019 20:44:37
 
Ну, раз файла-примера нету, то формула для 3-го столбца будет:
=ЛЕВСИМВ(ПРАВСИМВ(A1;ДЛСТР(A1)-ДЛСТР(ЛЕВСИМВ(A1;МАКС(--(ПСТР(A1;СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99))))-ДЛСТР(ЛЕВСИМВ(ПРАВСИМВ(A1;ДЛСТР(A1)-ДЛСТР(ЛЕВСИМВ(A1;МАКС(--(ПСТР(A1;СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99)))));МАКС(--(ПСТР(ПРАВСИМВ(A1;ДЛСТР(A1)-ДЛСТР(ЛЕВСИМВ(A1;МАКС(--(ПСТР(A1;СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99)))));СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99)))));МАКС(--(ПСТР(ПРАВСИМВ(A1;ДЛСТР(A1)-ДЛСТР(ЛЕВСИМВ(A1;МАКС(--(ПСТР(A1;СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99))))-ДЛСТР(ЛЕВСИМВ(ПРАВСИМВ(A1;ДЛСТР(A1)-ДЛСТР(ЛЕВСИМВ(A1;МАКС(--(ПСТР(A1;СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99)))));МАКС(--(ПСТР(ПРАВСИМВ(A1;ДЛСТР(A1)-ДЛСТР(ЛЕВСИМВ(A1;МАКС(--(ПСТР(A1;СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99)))));СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99)))));СТРОКА(A$1:A$99);1)=" ")*--(СТРОКА(A$1:A$99)<=30)*СТРОКА(A$1:A$99)))
Ну да, это формула массива.
Я не волшебник, я только учусь.
 
Когда отвечал файла-примера не было. Пояснил свои художества как мог.
Я не волшебник, я только учусь.
 
Спасибо вам большое!!!
Вы очень помогли.  
 
Вариант через пользовательскую функцию.
=РАЗБИТЬПО30(Лист1!$A$1;СТОЛБЕЦ())

Код
Function РАЗБИТЬПО30(s As String, n As Long) As String
    Dim q As String
    Dim i As Long
    Dim j As Long
    Dim b As Long
    b = 1
    Do
        q = Mid(s, b, 30 - 1)
        i = InStrRev(q, " ")
        q = Mid(q, 1, i - 1)
        j = j + 1
        If j >= n Then Exit Do
        b = b + i
    Loop
    РАЗБИТЬПО30 = q
End Function
 
МатросНаЗебре,

Спасибо!
Страницы: 1
Наверх