Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
如何在MS Excel中自定义拆分数组函数?_Excel_Vba_Excel Formula_Excel 365 - Fatal编程技术网

如何在MS Excel中自定义拆分数组函数?

如何在MS Excel中自定义拆分数组函数?,excel,vba,excel-formula,excel-365,Excel,Vba,Excel Formula,Excel 365,如何在工作表中使用VBA中的Split()进行自定义函数拆分(str为字符串,分隔符为字符串)。。它将以数组形式返回或溢出结果。。 比如说, Split("{20;30;40;50;60}",";") 将返回与写入公式中相同的数组中的溢出数组结果,如下所示: 20 30 40 50 60 我尝试在VBA函数中使用Split(字符串“;”),但它只返回1个值和文本类型。。 如果有,我还需要删除字符串中的“{”和“}”,但接受它,即使它不在那里。UDF应该

如何在工作表中使用VBA中的Split()进行自定义函数拆分(str为字符串,分隔符为字符串)。。它将以数组形式返回或溢出结果。。 比如说,

Split("{20;30;40;50;60}",";")
将返回与写入公式中相同的数组中的溢出数组结果,如下所示:

20
30
40
50
60
我尝试在VBA函数中使用Split(字符串“;”),但它只返回1个值和文本类型。。
如果有,我还需要删除字符串中的“{”和“}”,但接受它,即使它不在那里。

UDF应该使用二维数组

Public Function splitt(s As String, sep As String)
    arr = Split(s, sep)
    
    ReDim arr2(0 To UBound(arr), 1 To 1)
    
    For i = LBound(arr) To UBound(arr)
        arr2(i, 1) = arr(i)
    Next i
    
    splitt = arr2
End Function
例如:

使用Excel 365时,它将自动溢出。如果没有Excel 365,则需要数组项

  • 不要调用函数
    Split
  • 使用嵌套的
    Replace
  • 我们需要返回一个
    字符串
    数组

  • 那么我会这样称呼它:

    =LET(x,mySplit("{20;30;40;50;60}",";"),IF(ISNUMBER(--x),--x,x))
    

    如果您想将其转置,请使用
    TRANSPOSE

    =LET(x,mySplit("{20;30;40;50;60}",";"),TRANSPOSE(IF(ISNUMBER(--x),--x,x)))
    


    一个公式可以完成所有操作,无需vba:

    =FILTERXML("<a><b>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("{20;30;40;50;60}",";","</b><b>"),"}",""),"{","")&"</b></a>","//b")
    

    =FILTERXML(“

    显示您尝试的整个udf。您需要显示您的函数行。我敢打赌错误就在那里。尝试以下操作:
    Application.Worksheets(“您的工作表”).Range(“A1:A5”)=Application.Transpose(拆分(替换(“{20;30;40;50;60}”,“{”,“,”),“}”,“,”),“;”)
    @GWD如果OP有Office 365,那么所有这些都是不必要的,不能用UDF来完成的。@GWD我正在等待OP展示他们的,所以我可以教他们,而不是给出答案。谢谢。我不擅长VBA。我尝试搜索解决方案,但不太明白。出于沮丧,我删除了该文件。我想我更喜欢没有答案的单一公式VBA..FilterXML真的需要a和b标记吗?这意味着什么?
    FilterXM()
    L需要一个格式良好的XML结构(在某种程度上与html结构相当),其顶部至少有一个
    documentElement
    ,这里有
    ,另外还有子节点(例如
    )来标识数组项:-)
    =FILTERXML("<a><b>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("{20;30;40;50;60}",";","</b><b>"),"}",""),"{","")&"</b></a>","//b")