• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで、ExcelシートにCSVファイルのデータを取り込みたいのです)

VBAでExcelシートにCSVファイルのデータを取り込む方法

このQ&Aのポイント
  • VBAを使用して、ExcelシートにCSVファイルのデータを取り込む方法について教えてください。
  • 現在、VBAでCSVファイルのデータを取り込もうとしていますが、1行目しか取り込めません。項目数は32個です。
  • 提供されたコードでは、Excelシートの1行目のみが取り込まれ、2行目以下のデータは取り込まれていません。改行の判別に問題があるようです。アドバイスをお願いします。

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

  • ベストアンサー
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.4

ANo.3は回答としては間違いですね。 すみませんでした。 まずは、バイナリエディタでそのcvsファイル改行コードを確認なされてはどうでしょうか。 ・改行コードがない  output文の最後を";"で書いていると改行コードがありませんね ・改行コードが間違っている  cr(13)あるいはcrlfでしたら認識するはずです  lf(10)になっていませんか 改行コードがない場合は、単純に32個づつinput文で読めば良いと思います。 lfだったら一端バイナリで全てを読み込んで、lfをcrlfに変換して一時ファイルに書き出し、その一時ファイルを読み込む。 あるいはlfを検出してそこまでを一行として処理する。

rose1224
質問者

お礼

改行コードがlsになっていました。 >lfだったら一端バイナリで全てを読み込んで、lfをcrlfに変換して一時ファイルに書き出し、その一時ファイルを読み込む。 この方法でうまくいきました。 lfとcrlfの違いをよく理解できていなかったので、 大変勉強になりました。 ありがとうございました。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

>Open OpenFileName For Input Access Read As #1 コードは理解して載せていると思いますが、なぜ、シーケンシャル・アクセスしているのですか? シーケンシャル・アクセスするには、それなりの理由があるはずだと思うのです。 ただのCSVだけなら、 Open OpenFileName For Input As #1 だけで良いはずです。(と書いても、答えないかもしれませんが。) なお、一般的には、32列という勝手な予測ですから、 For j = 0 To 31    ↓ For j = 0 To UBound(MyString) だとは思います。 WinのCSVが一般的な内容なら、別にコード自体の問題ではありませんね。一通りの経験者のコードだから、それに文句つけたら、書いた人に悪いと思います。

  • boro-pc
  • ベストアンサー率30% (64/208)
回答No.5

ちゃんと動くみたいですよ 改行コードがまともなら ていうか >おそらく、改行が判別できないためかと思いますが これが推測できてこれだけ組めるなら次の行動もご自分でできると思うんですけど… 単純に元のCSVファイルの改行コードがLFになってるってことでしょ Line Inputでやるならどうやって変換するかってことだけ (この関数のなかでやってもよし、はたまたCSVファイル作るときにCRLFにしてもよし)

rose1224
質問者

お礼

改行コードがlfになっていました。 crlfにreplaceしたら、うまくいきました! ありがとうございました。

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.3

下記でどうでしょうか。 MyVar = Split(MyString, ",",,vbTextCompare)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

CSVファイルなんですよね? XLSファイルをオープンするのと同じ要領で、 Workbooks.Open "xxx.csv" ではダメですか?

rose1224
質問者

お礼

ファイルを開くだけならば、それでいいのですが… ありがとうございました。

  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

はじめまして If OpenFileName = "False" Then は If OpenFileName = False Then でしょう。読み込み部分ですが32列目まで表示されるのはjが31までループしてますね。j+1やってるので32列まで表示されると言うことです。ちなみにLine Inputは改行まで一行を全部読み込むコマンドですから、CVSファイルに改行がキチンと設定されているか確認してください。Line Inputで2行目のデータが表示されるのはおかしいです。下記のような方法もありますよ。 i = 1 While Not EOF(#1)  Input #1, MyVar  If MyVar <> "" Then   ThisWorkbook.ActiveSheet.Cells(i + 10, 1) = MyVar   For j = 2 To 31    Input #1, MyVar    ThisWorkbook.ActiveSheet.Cells(i + 10, j) = MyVar   Next j   i = i + 1  End If Wend Close #1 データを一個ずつ読み込み方法です。

rose1224
質問者

お礼

改行コードがlfになっていたようです。 これをcrlfに置換したら、うまくいきました。 ありがとうございました!

関連するQ&A