Arrays Excel公式获取单元格中分隔值的最大长度

Arrays Excel公式获取单元格中分隔值的最大长度,arrays,excel,excel-formula,Arrays,Excel,Excel Formula,我有一个单元格,其中包含由回车字符(10)分隔的多行文本 我需要知道最长行(19)的长度,使用的公式不是VBA(此excel不能有宏) P>任何人都可以帮助解决这个问题,并理想地解释它所做的事情是值得赞赏的,因为我真的想了解我所做的不仅仅是复制/粘贴,我认为自己是一个先进的Excel用户,并将我在VBA几分钟,并创造了复杂的公式之前,但我一直无法理解excel公式中的数组 我的胡言乱语: 我猜我需要在没有splitvba函数的情况下使用mid创建一个数组,然后使用=max(len({array

我有一个单元格,其中包含由回车字符(10)分隔的多行文本

我需要知道最长行(19)的长度,使用的公式不是VBA(此excel不能有宏)

<> P>任何人都可以帮助解决这个问题,并理想地解释它所做的事情是值得赞赏的,因为我真的想了解我所做的不仅仅是复制/粘贴,我认为自己是一个先进的Excel用户,并将我在VBA几分钟,并创造了复杂的公式之前,但我一直无法理解excel公式中的数组

我的胡言乱语:

我猜我需要在没有splitvba函数的情况下使用mid创建一个数组,然后使用=max(len({array}))

但我只是不太理解excel中的数组,我似乎无法理解数组以及如何遍历值。。简单地说,我只想将下面的X从1增加到A1的长度,这将给我一个X字符和下一个回车符之间的长度数组,因为我只寻找最大值,那么不正确的较短长度就不相关了,我还需要从查找中捕获非数字的结果(我刚刚忽略了这一点,因此更容易理解我所说的内容,而且可能与此无关,因为我不认为数组是这样工作的


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

使用MID解析字符(10)上断开的字符串并返回max

=MAX(LEN(TRIM(MID(SUBSTITUTE(A1,CHAR(10),REPT(" ",999)),(ROW(1:20)-1)*999+1,999))))
根据您的版本,这需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter确认,因为这是一个数组公式

然后用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组合键


来源:

如果您有Excel 2013+,您可以创建一个XML,然后使用
FILTERXML
函数解析行。
LEN
函数将返回每行的长度

=MAX(LEN(FILTERXML("<t><s>" & SUBSTITUTE(A1,CHAR(10),"</s><s>")& "</s></t>","//s")))
=MAX(LEN(FILTERXML(“&SUBSTITUTE(A1,CHAR(10),”)&“//s”))
根据您的Excel版本,您可以只需按enter键确认公式,也可以在按住ctrl+shift键的同时按enter键确认公式

编辑:

为了解释XML中需要“转义”的字符,我们只需要进行一些替换

文本字符串中只有两个字符需要“转义”,因为我们正在计算行的长度,所以我将它们替换为波浪号(而不是转义码)


=MAX(LEN(FILTERXML(“”)&SUBSTITUTE(SUBSTITUTE(A1)”,因此我得到这是在999个空间中进行subbing,然后使用mid选择块并修剪,然后删除空格..但是是什么让它迭代呢?行(1:20)?如果是这样的话,如果我有20多行,这需要一个更高的数字吗?很抱歉,我只是想了解数组中的迭代是如何发生的!@n3rding是的,这就是迭代,只需将它设置为您将拥有的最大行数。嘿,我最后使用了这个,工作完美,处理得当”&"这是当前XML版本没有的,谢谢你的帮助!谢谢,我会重新检查这一点,但我认为解决方案可能会更简单,因为长度计算已经在公式中进行,因此添加len是一个简单的选择,但我认为公式可以简化..我将在明天试一试eah这对于早期版本的exc可能是一个很好的选择但我真的很喜欢罗恩的答案,因为它使用了一个更清晰的公式谢谢!需要检查多个组织的使用情况。但可能是一个选项,因为我认为它们都是365@n3rding那么它们都应该有这个函数。所以我最后没有使用这个函数,只是因为我使用它的一个例子有一个“&”这导致它失败,但在其他方面工作得很好!@n3rding有一个简单的修复方法。我今天晚些时候会发布它。@n3rding请参阅我的编辑,了解需要在xml中转义的字符的修复方法。
=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))
=MAX(LEN(FILTERXML("<t><s>" & SUBSTITUTE(A1,CHAR(10),"</s><s>")& "</s></t>","//s")))
=MAX(LEN(FILTERXML("<t><s>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"<","~"),"&","~"),CHAR(10),"</s><s>")& "</s></t>","//s")))