• ベストアンサー

CSVファイル読込みについて

CSVファイル読込みで困っています。 どなたかご教授をお願い致します。 CSVファイル読込みを行うと、複数行のデータにも関わらず、ネットで調べたプログラムを用いると、1行で読込まれてしまいました。 その原因として、NL(LF)で改行されていたためです。 これをどうにか複数行で読込みを行うための方法はありませんか? NLがある場合、それをvbCrLfに変換してやればよいとは思ったのですが、うまくプログラムを組むことができません。 プログラムをどう組めばよいのか教えて頂けないでしょうか? 以下のサイトを利用させて頂き、読込みを行おうとしました。 http://www.k1simplify.com/vba/tipsleaf/leaf291.html VB初心者なので、どなたかご教授頂けると助かります。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.3

UNIXのファイルでは改行がLFのみなので、このようなことが起こります。 FileSystemObjectを使うとLFのみでも、1行ずつの読み込みが可能です。 サンプル Dim FSO Dim Stm Dim Buf As String Set FSO = CreateObject("Scripting.FileSystemObject") Set Stm = FSO.OpenTextFile("C:\xx~") 'ファイルを開く Do Until Stm.AtEndOfStream 'EOFになるまでのループ   Buf = Stm.ReadLine() '1行分のデータの読み込み   '== 1行分の処理 == Loop Stm.Close 'ファイルを閉じる 本来は参照設定で、Windows Script Host Object Model を指定し、 オブジェクト形式を正しく設定すべきですが、省略しました。 興味があるなら、WSH(WindowsScriptHostの略)などで、Google検索してみてください。

tommy57111
質問者

お礼

回答ありがとうございます。 そうなんですね。UNIXだとLFのみとなることがあるんですね。 あるツールから吐き出すファイルがLFとなってましたのでためになりました。 FileSystemObjectを用いることで、1行ずつの読込みができました。 サンプルを利用させて頂き、うまく読込むことができました。

その他の回答 (2)

  • pulsa
  • ベストアンサー率57% (34/59)
回答No.2

Line Inputで読み込もうとしたら、改行コードが『NL』だった為に、全部1行に入ってしまった って事でしょうか? 全部入ってしまった変数をReplaceで置き換えてやれば、回避可能だと思います Buf=Replace(Buf,vbLf,vbCrLf) 改行コードの『NL』ってのは、すいません 知りません 因みに BufR = Split(Buf, vbLf)'BufRはバリアントで宣言 なんてやると、配列の形でBufRに格納されますので、BufR(0)を一行目として利用できます こうすれば、現在のプログラムに組み込むのは容易かも知れません

tommy57111
質問者

お礼

回答ありがとうございます。 おっしゃるとおりです。 Line Inputで読み込もうとしたら、改行コードが『NL』だった為に、全部1行に入ってしまいました。 NLは「New Line」のことでLFと同じ意味らしいです。 解説ありがとうございます。 勉強になりました。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

私はテストで シートのA1:B10に 東京 12 神奈川 23 静岡 33 愛知 43 三重 53 奈良 63 京都 73 大阪 11 兵庫 22 岡山 33 をつくり、プログラムで 県名+","+数字+Vblfのデータを連ねたファイルを作りました。 東京,12神奈川,23静岡,33愛知,43三重,53奈良,63京都,73大阪,11兵庫,22岡山,33 にメモ帳で見える拡張子.txtのデータを作ったということです。 これを全体をコピーして、エクセルのシートに貼り付けました。 すると A列に全て張り付く形の 東京,12 神奈川,23 静岡,33 愛知,43 三重,53 奈良,63 京都,73 大阪,11 兵庫,22 岡山,33 になりました。 そこでデーター区切り位置ー次へ-カンマー完了で A列  B列 東京 12 神奈川 23 静岡 33 愛知 43 三重 53 奈良 63 京都 73 大阪 11 兵庫 22 岡山 33 になりましたが、質問の場合なりませんか。 ーー メモ帳で読み込みコピー・貼り付けが気に食わないなら 県名+","+数字+VbCrLfのファイルに変換するプログラムを組んでみますが。 テキストエディターで両者を置換するエディタを持ってませんか。 持ってればそれで置換してみる。やってないがワードでも置換、書式なしで保存でうまきカナ無いかな。 全体としてファイル全体の文字列総体の長さ(が実際はテストのように短くなく、長い)は気になりますが、シーケンシャルファイルとかテキストファイルはレコードの考えは表に出ず、文字コード(vbCrLfも含め)の連なりと思いますから。VvbCrlfやvbLF(Mac?)で区切りとするのは、あとのお約束の世界のことですから。

tommy57111
質問者

お礼

回答ありがとうございます。 テキストエディタで置換し、読込みを行えばできるとは思いましたが、 そのファイルをCSVファイルを一発で読込みたかったのです。 そういうやり方もあるんだと勉強になりました。 ありがとうございました。

関連するQ&A