2017-11-13 14 views
3

複数行の.csvファイルを読み込み、各トークンをExcel内の独自のセルに配置しようとしています。問題は、受信した.csvファイルを制御できないことです。VBAのデフォルト(vbCr/vbCrLf)とは異なる区切り文字を使って、一度に1行ずつファイルを読み込む方法はありますか?

これらはすべて列数が同じです(ただし、可変行数ですが、説明は簡単です)。ただし、何らかの理由で.csvファイルのソースがの場合、CRLFをヘッダー行の末尾に置き、は時々となります。LFとなります。繰り返しますが、私はこれを支配していませんので、私は可変性をコードする必要があります。

私が理解する限り、VBAラインLine Input #1, strLineは、CRまたはCRLFのいずれかを使用して行を区切ります。これは意味があります。私はすべての.csvファイルの内容を1つの文字列に配置してからReplace strFileContents, vbCr, ""を使用してすべてのCR文字を削除しようとしましたが、これは後ですべてCRLFを取り除いたように思えます。

したがって、Line Input #1, strLineを使用して一度に1行を受け入れる方法がありますが、区切り文字はLFですか?または、文字列の内容全体を操作できる別の方法がありますか(つまり、CRのみを取り除き、CRLFのインスタンスではありません)、そこからの文字列はSplit()ですか?ここで

は私のコードの短縮版である:

Dim Column, Row As Integer 'used Sheets().Input(Row, Column).Value to insert strings 
Open strFilePath For Input Access Read As #1 
Do Until EOF(1) 
    Line Input #1, strLine 
    strLine = Split(strLine, vbLf)(1) 
    arr = Split(strLine, ",") 
    For Column = 1 to 8 
     'insert stuff 
    Next Column 
    Row = Row + 1 
Loop 

しかし、これは私のためにかなりの仕事をしない、と私はそれがなかったならば、私はまだ余分CR文字に対処しなければならないと考えています。

ありがとうございます。

+2

'私は...すべてのCR characters'を排除するために、 ""、、vbCrをstrFileContentsを交換しようとしてきた - 良いです。すべての 'LF'を' CRLF'に置き換えるための第2段階を追加しました。 – GSerg

+0

ああ、これは理にかなっています。今すぐ試して更新します。 –

答えて

4
asc(vbLF)=10 
asc(vbCR)=13 
asc(vbCRLF)=13 

だから、vbLFのみを交換してください。


Sub test() 

    Dim strTest As String 

    strTest = "First Line " & vbLf & "Second Line" & vbCrLf & "Third Line" & vbCr & "Fourth Line" 
    strTest = Replace(strTest, vbCrLf, vbCr) '/ Gets rid of double line breaks caused by next replacement 
    strTest = Replace(strTest, vbLf, vbCr) 

    MsgBox strTest 


End Sub 
+0

ありがとうございます。私は現在、このメソッドを現在自分のコードに実装しており、質問をできるだけ早く更新します。私はこれが間違いなく私のために働くべきだと思います。 –

+1

@JonasZebariは質問を更新しないで、代わりに[** this **](https://stackoverflow.com/help/someone-answers)を読んでください。 –

関連する問題