我有一个丑陋的导出字符串来自另一个脚本,我想知道这是否可能:例如如果你有字符串:
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
如果我将字符串复制粘贴到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
但是如果我将导出字符串更改为
=SplitEnumbersDown("row1_c1,row2_c1,row3_c1")|=SplitEnumbersDown("row1_c2,row_2_c2,row3_c3")
- 这有一个循环引用......我在某个地方有错误吗?
我知道text-to-column,然后使用transpose粘贴Special,但我希望自动完成。
所以最终目标是将导出字符串复制粘贴到Excel中并自动转换它。
答案 0 :(得分:1)
这应该有效:
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