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