我在Excel的一列中有许多由管道分隔的字符串。用竖线分隔的所有字符串均不得超过15个字符,因此我想确定是否有任何单元格的字符串用超过15个字符的竖线分隔。
因此在下面的示例中,假设这是A2,A3和A4。该公式将在B列中。B4中的公式应提醒我A4违反了规则。
Bobby|Janet
Ted|Sammy|Susan|Fred
Billy|Maddie|JohnJacobJingleheimerShmitt|Matthew
理想情况下,该公式应该给我最长字符串中的实际字符数。
(也许我需要使用VBA创建自定义公式?)
答案 0 :(得分:5)
如果您具有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进行确认。
在没有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进行确认。
答案 1 :(得分:3)
如果您愿意接受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)
答案 2 :(得分:2)
如果您具有Excel 2013+(而不是Excel for 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")))
(要输入/确认数组公式,请在按 enter ctrl + shift >。如果正确执行此操作,Excel会将括号{...}
放在在公式栏中显示的公式周围。)