Формула Excel для получения максимальной длины значения с разделителями в ячейке - PullRequest
2 голосов
/ 15 января 2020

У меня есть одна ячейка, которая содержит несколько строк текста, разделенных символом возврата каретки CHAR (10).

Cell A1 = "First line of text
Second line of text
Third line" 

Мне нужно знать длину самой длинной строки (19), используя формулу не VBA (у этого excel не может быть макросов).

Любая помощь, которую кто-то может оказать для решения этой проблемы и в идеале объяснить, что он делает, будет принята с благодарностью, поскольку я искренне хочу понять, что я вкладываю, а не просто копировать. / paste, я считаю себя продвинутым пользователем Excel и занял бы у меня несколько минут в VBA, и раньше я создавал сложные формулы, но я никогда не мог понять массивы в формулах Excel ..

Моя болтовня:

Я предполагаю, что мне нужно создать массив, используя mid в отсутствие функции split vba, затем использовать = max (len ({array})).

Но я просто не очень понимаю массивы в Excel, я не могу разобраться с ними и понять, как я могу перебирать значения. В своем простом уме я просто хочу увеличить X в ниже от 1 т o длина A1 это даст мне массив длин между символом X и следующим возвратом каретки, и так как я ищу только макс, неправильные более короткие длины не имеют значения, мне также нужно поймать не числа c результаты поиска (я только что пропустил это, чтобы было легче понять, о чем я говорю, и в любом случае это, вероятно, не имеет значения, поскольку я не думаю, что именно так работают массивы!

{=max(FIND(CHAR(10),A1&CHAR(10),X)-X)}

Ответы [ 3 ]

3 голосов
/ 15 января 2020

Если у вас Excel 2013+, вы можете создать XML, а затем использовать функцию FILTERXML для разбора строк. Функция LEN будет возвращать длину каждой строки.

=MAX(LEN(FILTERXML("<t><s>" & SUBSTITUTE(A1,CHAR(10),"</s><s>")& "</s></t>","//s")))

В зависимости от вашей версии Excel, вы подтвердите формулу с помощью , введите или удерживая нажатой * 1008. * ctrl + смещение во время нажатия введите .

enter image description here

РЕДАКТИРОВАТЬ:

Чтобы учесть символы, которые нужно "экранировать" в XML, нам просто нужно сделать несколько замен.

Есть только два символа, которые должны быть " "сбежал" в текстовой строке. Поскольку мы считаем длину строки, я заменил их тильдой (а не кодом выхода).

=MAX(LEN(FILTERXML("<t><s>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"<","~"),"&","~"),CHAR(10),"</s><s>")& "</s></t>","//s")))

enter image description here

3 голосов
/ 15 января 2020

Используйте MID, чтобы проанализировать разрыв строки в Char (10) и вернуть максимум

=MAX(LEN(TRIM(MID(SUBSTITUTE(A1,CHAR(10),REPT(" ",999)),(ROW(1:20)-1)*999+1,999))))

В зависимости от вашей версии это должно быть подтверждено с помощью Ctrl-Shift-Enter вместо Enter при выходе из редактирования режим как формула массива.

enter image description here

1 голос
/ 15 января 2020
=MID(A2,LEN(A2)+1-MATCH(MAX(FIND(CHAR(10),(RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2))))&CHAR(10)))),FIND(CHAR(10),(RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2))))&CHAR(10))),0),MAX(FIND(CHAR(10),(RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2))))&CHAR(10))))-1)

Затем измените с помощью LEN

=LEN(MID(A2,LEN(A2)+1-MATCH(MAX(FIND(CHAR(10),(RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2))))&CHAR(10)))),FIND(CHAR(10),(RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2))))&CHAR(10))),0),MAX(FIND(CHAR(10),(RIGHT(A2,ROW(INDIRECT("1:"&LEN(A2))))&CHAR(10))))-1))

CTRL + SHIFT + ENTER после вставки.

source: https://www.listendata.com/2015/10/excel-find-longest-word-in-cell.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...