2017-05-03 22 views
1

私は件のデータを変換しようとしている:VBAデータ変換texte形式

Date;Employee;Ticket number;Table number 
30/09/2016;Josh;005421;17 
30/09/2016;Annie;004412;25 
30/09/2016;John;001124;12 

私がそうでなければ、私は「ゼロ」を失う、私の3番目の列の書式を変更する必要があります。

期待される結果:

Expected result

私のコード以下の通りです:

Range("A6:A1048576").TextToColumns Destination:=Range("A6"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Semicolon:=True, Fieldinfo:=Array(Array(3,2)) 

問題は私のコードではなく、第三との最初の列の形式が変更ということです。なぜか分からない。

問題のお奨めは、ここに:私はマクロエディタを使用してプロセスを記録し

Fieldinfo:=Array(Array(3,2)) 

Format text for col 3

Sub Macro1() 
    ' 
    ' Macro1 Macro 
    ' 

    ' 
    Columns("A:A").Select 
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ 
     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ 
     Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _ 
     :=Array(Array(1, 1), Array(2, 1), Array(3, 2), Array(4, 1)), TrailingMinusNumbers:= _ 
     True 
    Range("B6").Select 
End Sub 

私のコードはマクロエディタに似ています。したがって、私はなぜ私は期待された結果を得られないのか分からない。

私に手を差し上げてください。

おかげで、マクロレコーダーを使用して、各列の

FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 2), Array(4, 1)) 

一つの配列を指定する必要が示したよう素晴らしい一日

+2

あなたの実際の目標が何であるかはわかりません。以前にデータをどのように表示していたかを[編集]して追加することができますか? 「第3列ではなく第1列を変換する」とはどういう意味ですか?常にあなたの質問に追加してください:あなたのコードは実際に何をしているのか、何を期待していますか?常に十分に機能する[mcve]を提供してください。 –

+1

同じことをしているマクロを記録するとどうなりますか? – Andreas

+0

@Pehこんにちは、これは私が欲しいものです:http:// hpics。li/a8bcb06 未処理データ: 30/09/2016; Josh; 005421; 17 30/09/2016; Annie; 004412; 25 30/09/2016; John; 001124; 12 –

答えて

1

を持っています。

この引数は、2要素配列の配列で、各要素の配列は特定の列の変換オプションを指定します。最初の要素は列番号(1ベース)で、2番目の要素は列の解析方法を指定するxlColumnDataType定数の1つです。ここで


動的のFieldInfoの配列を生成する方法の例です:
まず、我々は我々が必要とするどのように多くの列を決定する必要があります。セミコロンを数えることでこれを行います。

Sub GeneraterFieldInfoArrayExample() 
    Const cDelimiter As String = ";" 

    Dim str As String 
    str = "30/09/2016;Josh;005421;17" 'replace with representative data, something like ThisWorkbook.Worksheets("Sheet1").Range("A6").Value 

    Dim countCols As Long 
    countCols = Len(str) - Len(Replace(str, cDelimiter, "")) + 1 'determine how many columns are needed by counting semicolons. Afterwards we build the array. 

    Dim arrFieldInfo() As Variant 
    ReDim arrFieldInfo(countCols - 1) As Variant 'resize array 

    Dim iCol As Long 
    For iCol = 1 To countCols 'generate array for each column 
     Select Case iCol 
      Case 3, 10 'format column 3 and 10 as text 
       arrFieldInfo(iCol - 1) = Array(iCol, 2) 
      Case Else 'format any other columns as default 
       arrFieldInfo(iCol - 1) = Array(iCol, 1) 
     End Select 
    Next iCol 

    'use like: Fieldinfo:=arrFieldInfo() 
End Sub 

最初のケースでは、テキストとして書式設定する必要があるすべての列がリストされます。その他の列はすべてデフォルトの形式になります。必要に応じて追加のケースを追加することができます。

+0

Peh、あなたの答えに感謝します。このソリューションは私を少し「悩ます」。実際には、私はapproximatly 100列を含むファイルでこれを行う必要があります...コードを少し軽く見えるように利用可能な他のソリューションがありますか? –

+0

[参照](https://msdn.microsoft.com/en-us/library/office/ff193593.aspx)を読むと、 'FieldInfo:= Array(Array(3、2))'も同様に動作するはずです'DataType:= xlDelimited'であるが、どういうわけかそれはしない。だから私はその巨大な配列を動的に作成するチャンスしか見ません。 –

+0

ありがとう、私はしばらくするとこれを後で試してみます。コードが遅すぎることはないと思います。それがどのように機能するのか、それとも他の解決策が見つかった場合はお知らせします。あなたを見てください:) –

関連する問題