Excelfunction限制8192个字符

我在一个单元格中有超过10,000个字符的公式。 我不能参考多个单元格,因为要求限制它。

例:

=IF(NOT(ISERROR(SEARCH(String1,IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),"")))),SUBSTITUTE(IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),""),String1,$G2),IF(NOT(ISERROR(SEARCH(String2,IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),"")))),SUBSTITUTE(IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),""),String2,$F2), IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))="","",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,"&","_"),"-","_")," ",""),":","_")),COLUMNS($K$1:K$1))),""))) 

我不确定这个公式可能会有帮助。 但是那个公式的例子。

在Excel中有命名的范围( 定义的名称 )公式可能会根据该范围的名称调用单元格。

有没有类似的公式/function? 因为我的function长,因为嵌套的公式。

我可以用我自己的angular色取代“SUBSTITUTE”吗? 像前一样。 SUBTE

如前所述,最好的解决scheme几乎可以肯定地写一个整洁的VBAfunction,为您做所有的事情。

但是,正如你明确要求的那样。 这是一个函数的代码,它只是一个SUBSTITITE但长度较短。 我看不到任何你使用instance_num参数的地方,所以我没有build立它。

您需要将以下代码添加到VBA编辑器中的新模块,然后您可以通过编写SU()来使用工作表上的SUBSTITUTE()函数

 Function SU(txt As String, old_text As String, new_text As String) As String SU = Application.WorksheetFunction.Substitute(txt, old_text, new_text) End Function 

VBA可能是最好的select。 不过,如果你不能考虑这个问题,可以考虑把公式分成5到6个小公式。 这可能会更好,使用该公式的人有更多的机会去了解正在发生的事情:

像这样: 在这里输入图像描述 这里第二行的公式在第一行被分成两个其他的公式。

注意: Wenn表示IF

而且 – 当你使用这样的大公式时,总是试图以一种有意义的方式来格式化它们。 例如,这样的事情:

在这里输入图像说明

这是通过点击你想要新行的地方,按下ALT+Enter 。 代表所有人,每天处理严重的公式 – 谢谢! 🙂

编辑:无论如何,如果VBA是一个选项,最坏的情况下会看起来像这样:

 Option Explicit Public Function MyLongFormula() As String Dim strResult As String Application.Volatile strResult = "=IF(NOT(ISERROR(SEARCH(String1,IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_""))," strResult = strResult & "COLUMNS($K$1:K$1))="""","""",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_""))," strResult = strResult & "COLUMNS($K$1:K$1))),"""")))),SUBSTITUTE(IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_""))," strResult = strResult & "COLUMNS($K$1:K$1))="""","""",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_"")),COLUMNS($K$1:K$1))),"""")," strResult = strResult & "String1,$G2),IF(NOT(ISERROR(SEARCH(String2,IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_""))," strResult = strResult & "COLUMNS($K$1:K$1))="""","""",INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_"")),COLUMNS($K$1:K$1))),""""))))," strResult = strResult & "SUBSTITUTE(IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_"")),COLUMNS($K$1:K$1))="""",""""," strResult = strResult & "INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_"")),COLUMNS($K$1:K$1))),""""),String2,$F2)," strResult = strResult & "IFERROR(IF(INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_"")),COLUMNS($K$1:K$1))="""",""""," strResult = strResult & "INDEX(INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($J2,""&"",""_""),""-"",""_""),"" "",""""),"":"",""_"")),COLUMNS($K$1:K$1))),"""")))" MyLongFormula = Evaluate(strResult) End Function Public Function MyLongFormula2() As String Application.Volatile MyLongFormula2 = Evaluate("=sum(1,2)") End Function 

只要写=MyLongFormula2来感受预期的工作方式。

不幸的是,你的问题的答案是“不”,或者至less“不完全”。 你不能从字面上命名一个函数 ,但是你可以使用命名公式 。 例如,不能使用名称为函数SUM()创build别名S ,但是可以创build一个命名公式S ,当公式发生在另一个公式中时,将对单元格上方的100个元素进行求和。 有了一定的巧妙,通常可以使用命名公式来缩短很长的公式,但不能像引入function缩写那样机械化。

可以使用VBA创buildUDF函数,这些函数是工作表函数的缩写别名,但是如果要使用VBA,则通常可以用function上等效的UDFreplace整个​​公式,而不是简单地用别名replace某些函数。 查看@CallumDA的答案,我的意思是工作表函数的VBA别名。