VBAのテキストインポートの際の改行コードについて教えてください。


テキストファイルをインポートし、テーブルに格納するつもりですが、
どうやら改行コードが認識されていないようです。
フィールド区切りは問題ないのですが、改行コードを認識せず、ひとつのレコードとしてすべて読み込まれています。

該当部分ですが、
FileName = TestGetFileName 'ファイル指定のfunction

lngFileNum = FreeFile()
Open FileName For Input As #lngFileNum

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Order")

Do Until EOF(lngFileNum)
Line Input #lngFileNum, strData

varData = Split(strData, ",", , vbTextCompare) 'ここでカンマ区切りにしてるけど、改行コードが無視されているらしい

となっています。
元ファイルを書き換える方法なら動いたのですが、事情によりこの方法は使えません。
インポートした時点で処理したいのですが、どなたかおしえてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/11/07 20:13:46
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.2

回答回数1314ベストアンサー獲得回数393

ポイント100pt

Scripting ライブラリの FileSystemObject を使用した例ですが、

 Sub test()
    Filename = TestGetFileName  'ファイル指定のfunction
    
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Order")
        
    For Each strData In Split(fso.OpenTextFile(Filename).ReadAll(), vbLf)
        varData = Split(strData, ",", , vbTextCompare)
              :
              :
    Next
End Sub

という感じでできないでしょうか。

id:kia_44

さすがです!動きました!

回答のものをもうちょっと噛み砕いてみたいと思います。

2010/11/07 20:12:06

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント35pt

Line Input #は 改行コードまで読み込み、改行コード自体は 読み込まない仕様になっています。

なので 改行が含まれている文字列を読み込みしたい場合は、Getなどを用いて処理したほうがいいでしょう。

http://officetanaka.net/excel/vba/statement/Get.htm

id:kia_44

getで読み込んだことがないのでこの機会に試してみたいと思います。ありがとうございました。

2010/11/07 20:13:26
id:Mook No.2

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント100pt

Scripting ライブラリの FileSystemObject を使用した例ですが、

 Sub test()
    Filename = TestGetFileName  'ファイル指定のfunction
    
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("Order")
        
    For Each strData In Split(fso.OpenTextFile(Filename).ReadAll(), vbLf)
        varData = Split(strData, ",", , vbTextCompare)
              :
              :
    Next
End Sub

という感じでできないでしょうか。

id:kia_44

さすがです!動きました!

回答のものをもうちょっと噛み砕いてみたいと思います。

2010/11/07 20:12:06
  • id:kia_44
    'ここでカンマ区切りにしてるけど、改行コードが無視されているらしい
    変な日本語ですね。
    カンマでフィールドを分けることはできていますが、
    改行コードでレコードを分けることができていませんということです。
  • id:Silvanus
    1つのLine Input # では、CR[Chr(13)]かCR+LF[Chr(13)+Chr(10)]まで
    読むはずですから、そもそも元データにCR、CR+LFが入っていないのでは?
    バイナリエディタか何かデータを覗いて確認される方が先かと。
  • id:Mook
    対象のアプリケーションとバージョンは何でしょうか。
    Access ですか Excel ですか。

    データ中に改行コードがあった場合、それをどのように処理したいのでしょうか。
    具体的な例があると適切な回答が得られるかと思います。

    123,"ABC
    DEF"

    となっているデータを、123 と "ABC<改行>DEF" としたいのでしょうか?
  • id:kia_44
    必要事項がまるまるもれていました。ごめんなさい。
    対象のアプリケーションはAccess2007です。
    改行コードは全てのレコードの末のみに、LFが入っているようです。

    例として、
    a,b,c,d LF←改行コードです
    e,f,g,h LF

    となっているものを
    a,b,c,d CR+FL
    e,f,g,h CR+LF (でいいのかな?)
    に読み替えてほしいのです。

    質問に書いたとおり、元のデータを書き換えることができないためにこまっています。
    上記のままですとstrDataにはa,b,c,d LF,e,f,g,h LF,といった具合ですべてを1レコードとし、レコードわけされていました。
    認識しているようです。
    strDataに、a,b,c,dと与えたいのですが…。

    元データをテキストエディタで開き、改行コードを置換して試してみたところ、レコード区切りとして認識されました。
  • id:kia_44
    あと、データ内に改行コードは(レコード末尾を除き)入らないようになっています。
  • id:kia_44
    Mookさんのおかげでこんなのが出来上がりました。
    http://memo.bz/access/2chconv/
  • id:Mook
    このように活用されていましたか。
    面白そうですね。

    ご報告ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません