アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
Access2010

VBAよりCSVファイルの2行目の文字列を取得したいのですが、とりあえず下記で取得することができました。

path = CurrentProject.path
cnt = 1
Open path & "\test.csv" For Input As #1
Do Until cnt > 2
  Line Input #1, buf
  If cnt = 2 Then
    MsgBox buf
  End If
  cnt = cnt + 1
Loop
Close #1

例えば、
1行目 xxxxx
2行目 フィールド1,フィールド2,フィールド3,・・・
3行目 データ1,データ2,データ3・・・
という内容のCSVがあり、上記のVBAを実行すると、2行目の『フィールド1,フィールド2,フィールド3,・・・』を表示できます。

で、実際のCSVファイルは数十万行あるのですが、そのファイルを指定し上記VBAを実行すると、Line Input #1, bufの箇所で「実行時エラー14 文字列領域が不足しています。」と表示されてしまいます。

何かよい方法はございますでしょうか。
なお、当該Accessはユーザーへ配布するものであり、Runtime環境で実行します。
よって、CreateObjectは使えない状況です。

勉強不足で申し訳ございませんが、ご教授の程よろしくお願い致します。

A 回答 (1件)

> で、実際のCSVファイルは数十万行あるのですが、



このファイルをコピー、編集して3行とかにしたら、2行目はきちんと取り込めますか?
対象のCSVファイルの改行コードがVBAで想定しているものと違っていて、1行読み込むつもりが改行をきちんと見つけられずにファイル全体を読んでしまうとか?

この回答への補足

改行コードがLFということが判明しました。
調べたところ、LFだといったんデータ全てを読み込む必要があるようです。
今回読み込もうとしているCSVファイルは100MB程になるので、Line Inputでの読み込みは難しそうです。

別の方法を検討してみたいと思います。
また、投稿させて頂くことがあるかと思いますが、ご教授頂けると幸いです。

宜しくお願い致します。

補足日時:2014/09/29 18:04
    • good
    • 0
この回答へのお礼

neKo_deuxさま
ご回答ありがとうございます。
また返信が遅くなり申し訳ございません。

実際のCSVファイルをコピーし、4行目以降を削除して試してみました。

『実行時エラー62 ファイルにこれ以上データがありません。』と表示されました。
?buf で見てみると、1~3行目全てを読み込んでいるようですので、おっしゃる通り改行コードが見つけられずにファイル全体を読んでしまっているかと思われます。

当該CSVファイルを秀丸エディタで開いてみると、行末は「↓」になっているので改行はちゃんとされているように見受けられるのですが。。

なお、当該CSVファイルをExcelでいったん開き上書き保存したものを読み込んでみると、ちゃんと2行目が取得できるので、これによりVBAで想定している?改行コードになった・・・ということになるのでしょうか。

実運用上、わざわざExcelで開いて保存し直すのは手間がかかりますし、Excelの行の上限を超えるケースもあり得るので(Excelで開けない)、できれば元のCSVファイルは何も加工せずに読み込ませたいところです。

何か対策はございますでしょうか。
度々で申し訳ございませんが、ご教授頂けると幸いです。

お礼日時:2014/09/29 11:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す