2016-04-19 16 views
0

私は、次の形式である.CSVありますVBA - 多次元配列の分割CSVファイル

[TestHeader] FIELDS、 "LANGUAGE"、 "LC_NUMERIC"、 "CELLNAME"、 "テスト・タイプ"、「REPORTERを(80)」、「テキスト(80)」、「テキスト(64)」、「テキスト(80)」、「テキスト(80)」、「テキスト(80)」、「テキスト「テキスト80」、「テキスト80」、「テキスト12」、「テキスト20」、「テキスト12」、「テキスト20」のように、このデータをシートのように模倣する多次元配列に入れます。セルが空の場合、アレイ内で空になります。 enter image description here

私は以下を使用しようとしていますが、必要なものに適していない1次元配列にしかデータを入れません。

Dim Delimiter As String 
Dim TextFile As Integer 
Dim FilePath As String 
Dim FileContent As String 
Dim LineArray() As String 
Dim DataArray() As String 

'Inputs 
    Delimiter = "," 
    FilePath = emiFilePath 

'Open the text file in a Read State 
    TextFile = FreeFile 
    Open FilePath For Input As TextFile 

'Store file content inside a variable 
    FileContent = Input(LOF(TextFile), TextFile) 

'Close Text File 
    Close TextFile 

'Separate Out lines of data 
    LineArray() = Split(FileContent, Delimiter, -1, vbTextCompare) 

'Read Data into an Array Variable 
     'Re-Adjust Array boundaries 
     ReDim Preserve DataArray(UBound(LineArray)) 
' 
     'Load line of data into Array variable 
     For y = LBound(LineArray) To UBound(LineArray) 
      DataArray(y) = Replace(LineArray(y), Chr(34), vbNullString) 
     Next y 
+0

の助け配列を使用するために、任意の特定の理由で

Function mySplit(ByVal emiFilePath As String) As Variant() Dim Delimiter As String Dim TextFile As Integer Dim FilePath As String Dim FileContent As String Dim LineArray() As String Dim DataArray() As Variant 'Inputs Delimiter = "," FilePath = emiFilePath 'Open the text file in a Read State TextFile = FreeFile Open FilePath For Input As TextFile 'Store file content inside a variable FileContent = Input(LOF(TextFile), TextFile) 'Close Text File Close TextFile 'Separate Out lines of data LineArray = Split(FileContent, vbCrLf, -1, vbTextCompare) ReDim DataArray(LBound(LineArray) To UBound(LineArray)) Dim i As Long 'Separate fields inside the lines For i = LBound(LineArray) To UBound(LineArray) DataArray(i) = Split(LineArray(i), Delimiter, -1, vbTextCompare) Next i mySplit = DataArray End Function 

+0

ADOとは何ですか?私はそれらに非常に精通しているので、私は配列を使用します。 – peetman

+1

@PankajJajuは、CSVファイルを読み取る方法を指しています。このサイトには、彼が何を指しているのかを示す十数個の記事があります。それらを探してください:http://stackoverflow.com/search?q=excel+vba+ado+csvしかし、私がサポートしたいと思うあなたのソリューションに固執したいなら、私はファイル全体を読まないでしょう文字列に変換するのではなく、ここに示すように行単位で入力する(受け入れられた解決策):http://stackoverflow.com/questions/11185191/opening-csv-file-via-ado-connection-column-limitation-to-255-or- just-use-ano – Ralph

答えて

0

ときコード:

'Separate Out lines of data 
    LineArray() = Split(FileContent, Delimiter, -1, vbTextCompare) 

あなたのCVSはラインのWindowsスタイルのエンドを使用する場合は、「」

を区切り文字で区切られた行が、フィールドを分離し、最初にデータを分割されていませんvbCrLfについて。 @Ralphと@VincentG

Dim Delimiter As String 
Dim TextFile As Integer 
Dim FilePath As String 
Dim FileContent As String 
Dim LineArray() As String 
Dim DataArray() As Variant 

'Inputs 
    Delimiter = "," 
    FilePath = emiFilePath 

'Open the text file in a Read State 
    TextFile = FreeFile 
    Open FilePath For Input As TextFile 

'Store file content inside a variable 
    FileContent = Input(LOF(TextFile), TextFile) 

'Close Text File 
    Close TextFile 

'Separate Out lines of data 
    LineArray() = Split(FileContent, vbLf, -1, vbTextCompare) 

'Read Data into an Array Variable 
     'Re-Adjust Array boundaries 
     ReDim Preserve DataArray(UBound(LineArray)) 
' 
     'Load line of data into Array, separate by commas and remove unwanted blank strings 
     For y = LBound(LineArray) To UBound(LineArray) 
      DataArray(y) = Split(Replace(LineArray(y), Chr(34), vbNullString), Delimiter) 
     Next y 
+0

私の関数は2D配列ではなく配列の配列を返していることに注意してください。 –

+0

私の.csvファイルに行があるとは思わない。あなたの提案は1行のLineArrayを返します。 – peetman

+0

あなたは[CSVファイル](https://en.wikipedia.org/wiki/Comma-separated_values)を持っていないので、あなたの "テキストファイル"でどのようにレコードが区切られているかを調べる必要があります。 – Ralph

0

?あなたはCSVを読むために `ADO`と考えましたか?