Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel公式查找由字符分隔的最长字符串_Excel_Vba_Excel Formula - Fatal编程技术网

Excel公式查找由字符分隔的最长字符串

Excel公式查找由字符分隔的最长字符串,excel,vba,excel-formula,Excel,Vba,Excel Formula,我在Excel的一列中有许多用管道分隔的字符串。所有由管道分隔的字符串都不允许超过15个字符,因此我想知道是否有任何单元格的字符串由管道分隔,长度超过15个字符 在下面的例子中,假设是A2,A3和A4。公式将在B列。B4中的公式应提醒我A4违反规则 Bobby|Janet Ted|Sammy|Susan|Fred Billy|Maddie|JohnJacobJingleheimerShmitt|Matthew 理想情况下,这个公式应该给出最长字符串中的实际字符数 (也许我需要用VBA创建自定义

我在Excel的一列中有许多用管道分隔的字符串。所有由管道分隔的字符串都不允许超过15个字符,因此我想知道是否有任何单元格的字符串由管道分隔,长度超过15个字符

在下面的例子中,假设是A2,A3和A4。公式将在B列。B4中的公式应提醒我A4违反规则

Bobby|Janet
Ted|Sammy|Susan|Fred
Billy|Maddie|JohnJacobJingleheimerShmitt|Matthew
理想情况下,这个公式应该给出最长字符串中的实际字符数

(也许我需要用VBA创建自定义公式?

如果您对VBA解决方案持开放态度


要实现,请执行以下操作:
Open VBE>Insert Module>Paste code


然后,您可以像调用任何其他函数一样从工作表中调用该函数,并选择要测试的单元格:
=LenTest(A1)
,它将返回
Pass
Fail@
,并返回失败的字符串(即字符长度>15)

如果您有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确认

如果您有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")))
=AGGREGATE(14,4,LEN(FILTERXML(“&SUBSTITUTE(A1,“|”),”)和“/s”)),1)
=MAX(LEN(FILTERXML(“&replacement(A1,“|”),“)&“//s”))
(要输入/确认一个数组公式,请按住ctrl+shift,同时按enter键。如果操作正确,Excel将在公式栏中看到的公式周围放置大括号
{…}
。)


到目前为止,您尝试了什么?打开VBA解决方案?使用VBA,几乎是微不足道的。如果没有VBA,要困难得多。我担心有人会问。我很抱歉地说,在这一点上我感到困惑,所以我什么都没有。直到现在我才知道VBA可以用来创建自定义公式。这看起来真的很有希望。不过我确实做了大量的谷歌搜索。关于查找两个特定字符之间的字符串长度的其他堆栈溢出问题,每个单元格只有两个字符。在这种情况下,我的字符串和字符数量不确定,因此这些都不起作用。我上面的评论应该是“使用VBA,几乎微不足道。没有VBA,更难(除非你的名字是Scott Craner)。”@约翰科勒曼:我一直在等待微软向我们发布那些由于工作限制而无法成为beta测试人员的新公式。我非常期待看到我能用
Filter()
和其他工具做些什么。我同意。令人惊讶的是,Excel在某些方面改进了很多,但在其他方面却很少。现在的内置函数并不比2000年好多少(我仍然使用Excel 2016,所以甚至不能使用
Textjoin
)。哇。太快了。你们太棒了。实际上我在Excel Online上试用过,但没有效果。我想我以后必须在另一台计算机上使用完整的Excel来完成它。@DarrenJansen Excel Online不允许使用数组公式。
=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")))