Формула Excel, чтобы найти самую длинную строку, разделенную символами - PullRequest
0 голосов
/ 01 марта 2019

У меня есть много строк, разделенных трубами в столбце в Excel.Ни одна из строк, разделенных трубками, не может быть длиннее 15 символов, поэтому я хочу выяснить, есть ли в каких-либо ячейках строка, разделенная трубами, длиной более 15 символов.

Итак, в приведенном ниже примере предположим, что это A2, A3 и A4.Формула будет в столбце B. Формула в B4 должна предупредить меня, что A4 нарушает правило.

Bobby|Janet
Ted|Sammy|Susan|Fred
Billy|Maddie|JohnJacobJingleheimerShmitt|Matthew

В идеале, эта формула должна дать мне фактическое количество символов в самой длинной строке.

(Возможно, мне нужно создать собственную формулу с помощью VBA?)

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Если у вас Office 365 Excel, тогда используйте эту формулу массива:

=TEXTJOIN(",",TRUE,IF(LEN(TRIM(MID(SUBSTITUTE(A4,"|",REPT(" ",99)),(ROW($XFD$1:INDEX(XFD:XFD,LEN(A4)-LEN(SUBSTITUTE(A4,"|",""))+1))-1)*99+1,99)))>15,TRIM(MID(SUBSTITUTE(A4,"|",REPT(" ",99)),(ROW($XFD$1:INDEX(XFD:XFD,LEN(A4)-LEN(SUBSTITUTE(A4,"|",""))+1))-1)*99+1,99)) & " has " & LEN(TRIM(MID(SUBSTITUTE(A4,"|",REPT(" ",99)),(ROW($XFD$1:INDEX(XFD:XFD,LEN(A4)-LEN(SUBSTITUTE(A4,"|",""))+1))-1)*99+1,99))) & " Characters.",""))

Будучи формулой массива, она должна быть подтверждена Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования.

enter image description here


Без Office 365 мы можем вернуть фиксированный возврат, но не фактическую длину

=IF(OR(LEN(TRIM(MID(SUBSTITUTE(A2,"|",REPT(" ",99)),(ROW($XFD$1:INDEX(XFD:XFD,LEN(A2)-LEN(SUBSTITUTE(A2,"|",""))+1))-1)*99+1,99)))>15),"This cell has an entry with too many Characters","")

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

enter image description here

0 голосов
/ 02 марта 2019

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

Затем используйте LENФункция для получения длины каждого элемента Наконец, используйте либо AGGREGATE, обычно вводимый для возврата длины самого длинного, либо используйте функцию MAX в формуле массива для того же результата.

=AGGREGATE(14,4,LEN(FILTERXML("<t><s>" & SUBSTITUTE(A1,"|", "</s><s>") & "</s></t>", "//s")),1)

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

(Чтобы ввести / подтвердить формулу массива , удерживайте нажатой клавишу ctrl + shift при нажатии , введите . Если вы делаете это правильно,Excel установит фигурные скобки {...} вокруг формулы, отображаемой в строке формул.)

enter image description here

0 голосов
/ 01 марта 2019

Если вы открыты для решения VBA ...

Option Explicit

Public Function LenTest(Target As Range) As String

Dim Temp: Temp = Split(Target, "|")
Dim i As Long

For i = LBound(Temp) To UBound(Temp)
    If Len(Temp(i)) > 15 Then
        LenTest = "Fail @ " & Temp(i)
        Exit Function
    End If
Next i

LenTest = "Pass"

End Function

Для реализации, Open VBE > Insert Module > Paste Code

Тогда вы можете просто вызвать функциюиз вашей таблицы, как и любой другой функции, выберите ячейку, которую вы хотите протестировать, примерно так: =LenTest(A1), которая вернет Pass или Fail @ со строкой, которая завершилась неудачей (длина символа IE> 15)

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