2017-11-17 11 views
1

私は別のスクリプトから来る醜いエクスポート文字列を持っており、これが可能かどうかは疑問です。Excel - 行と列へのテキスト?

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") に輸出文字列を変更した場合 - これは循環参照を持っている...私はどこかのエラーを持っていますか?

私はテキストと列を認識してから、転置で特殊文字を貼り付けますが、自動的に行いたいと思います。

最終目標は、エクスポート文字列をExcelにコピーして自動的に変換することです。

+0

使用サブではなく、UDF – CallumDA

+0

あなたはSplit関数や正規表現またはテキストから列を使用することができます。また、作成したFunctionを、目的の行からlastRowまでのSubループで使用します。 – danieltakeshi

答えて

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

+0

これはUDF経由で可能ですか?サブユーザーは、1.エクスポートをコピーして貼り付ける必要があります。2.サブを開始してください.... 1ステップがうまくいく – dv3

+1

UDFはワークシートにアクセスできません。そのセルには単一の値しか返されません。その意味での通常の式と同じです。この関数は配列を返し、ワークシートに配列数式を作成することができます。しかし、配列式よりも多くの行がある場合、ユーザーは配列式を拡張する必要があります。つまり、複数のステップがあります。常に同じ数の行(3)が存在するでしょうか? – CallumDA

+0

ありがとうございます - 空の列があると動作しないことに気付きました。 "row1_c1 || row1_c3" ....それは最後のステップでアイデアのタイプをスローします....アイデア?新しいスタック質問ですか? – dv3

関連する問題