2017-08-08 4 views
0

すべての行の最後に段落記号付きのCSVファイルがあります.VBAを使用してCSVファイルをループしてExcelシートにコピーする必要があります。私が使用しています以下のコード、段落記号付きのVBAでCSVファイルをループする

Dim filePath As String 
Dim row_number As Integer 
Dim col_number As Integer 
Dim lineFromFile As String 
Dim lineItems As Variant 

fileName = "D:\test.csv" 

Open filePath For Input As #1 

row_number = 1 

Do Until EOF(1) 
    Line Input #1, lineFromFile 
    lineItems = Split(lineFromFile, ",") 
    col_number = 1 
    For i = 0 To 15 
     Sheets("Sheet1").Rows(row_number).Columns(col_number + i).value = lineItems(i) 
    row_number = row_number + 1 
Loop 
Close #1 

Image for CSV file showing paragraph marker

問題は、コントローラが最後に段落マーカーに達したときにEOFが真取得され、それが最初の行のみを読んで何がさを見つけてください。これに関するいくつかの情報を入力してください。

+0

まず、最後のEOF値が何であるかを確定してから、その値に達するまで実行して、今度は1で停止してください。 – Luuklag

+0

EOF(1)が値または行番号でない場合、Doの1はファイルの識別です。 2番目のファイルを使用している場合、EOF(2)まで実行されます。 –

+0

"Dim"ステートメント、ファイルオープンなどのコードをもっと表示するかもしれないので、完全に理解しています。 – FreeMan

答えて

0

私はこれに対する解決策を得ました。私は最後に改行のためにループしてファイルを読むことができません。だから、私は行を分割し、次のようにデータを読むでしょう:

Line Input #1, lineFromFile 
lines = Split(lineFromFile, vbLf) 

For Each line In lines 
    lineItems = Split(line, ",") 
    Sheets("Sheet1").Rows(row_number).Columns(col_number + i).value = lineItems(i) 
Next line 

これは私にとってはうまくいきます。おかげで@ FreeMan、Luuklag

0

私は例外的にテキストファイルの読み方に精通していませんが、VBAがEOLマーカーとして見ているものを変更する方法がない限り、ファイルを一度に1文字ずつ読み込み、段落マーカーに達するまで文字列バッファーを挿入します。

すなわち、独自の機能を
Line Input #1, lineFromFile
を交換してください - このような何か:
lineFromFile = ReadALineFromMyFile(#1)
一度に1つの文字を読み取り、それは段落のマーカーを発見しています一度lineFromFileを返します。

あなたのコードはそれを "EOL"と認識し、あなたが書き込んだラインバッファを処理することができます。

泡立ち、すすぎ、真のEOFに達するまで繰り返します。

+0

ありがとう@FreeMan、しかしここで問題はコントロールが段落マーカーに到達したとEOFがtrueに設定され、ループから制御が出ています。他の行はループしません。 –

関連する問題