Excel – 文本到行和列?

我有一个丑陋的出口string来自另一个脚本,我想知道如果这是可能的:例如,如果你有string:

row1_c1,row2_c1,row3_c1|row1_c2,row_2_c2,row3_c3 

最简单的方法转换为:

 row1_c1 row1_c2 row2_c1 row2_c2 row3_c1 row3_c2 

如果我将该string复制粘贴到Excel中,文本到列的转换将自动发生。 但是,我如何处理文本到行呢? 这可能通过UDF?
我试过了:

 Public Function SplitEnumbersDown(in_ As String) Dim Enumbers() As String Enumbers = Split(in_, ";") Selection(1).Resize(UBound(Enumbers) + 1) = Application.Transpose(Enumbers) End Function 

但是,如果我改变输出string
=SplitEnumbersDown("row1_c1,row2_c1,row3_c1")|=SplitEnumbersDown("row1_c2,row_2_c2,row3_c3") – 这有一个循环引用…我有一个错误的地方?

我知道文本到列,然后粘贴特殊转置,但我想自动完成。

所以最终的目标是将导出的string复制粘贴到Excel中并自动将其转换。

这应该工作:

 Option Explicit Public Sub SplitString() Dim inputRange As Range, outputRange As Range Dim s() As String Dim al As Object Dim i As Long Set inputRange = ThisWorkbook.Worksheets("Sheet1").Range("A1") Set outputRange = inputRange.Offset(1, 0) 'output to cell(s) below Set al = CreateObject("System.Collections.ArrayList") s = Split(inputRange.Value, "|") For i = LBound(s) To UBound(s) al.Add Split(s(i), ",") Next i outputRange.Resize(UBound(v(0)), UBound(v)).Value = Application.Transpose(al.ToArray) End Sub 

在这里输入图像说明