Excel - 文本到行和&列?

时间:2017-11-17 10:49:55

标签: excel vba excel-vba

我有一个丑陋的导出字符串来自另一个脚本,我想知道这是否可能:例如如果你有字符串:

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中并自动转换它。

1 个答案:

答案 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

enter image description here