如何在MS Excel中自定义拆分数组函数?
如何在工作表中使用VBA中的Split()进行自定义函数拆分(str为字符串,分隔符为字符串)。。它将以数组形式返回或溢出结果。。 比如说,如何在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应该
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")