- ベストアンサー
エクセルのCSV形式の複数ブックを一括でインポートしたい
- あるフォルダ内にある複数のエクセルブック(CSV形式)を一括でインポートしたい。フォルダ内のエクセルブックは形式が同じで、一行目以下のデータを全てまとめたい。
- 質問者はウィンドウズXPで2002の環境を使用しており、VBAのコードを試しているが上手くいかない。
- 質問者はフォルダ指定連結のVBAのコードを使用し、特定のフォルダ内のCSV形式のエクセルブックを一括で読み込んでいるが、デバッグでエラーが発生している。解決策を教えてほしい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
問題点。 \はドライブ名・フォルダー名の区切りを表すのでファイル名指定後の\は不要です 誤 myName = Dir(myPath & "\*.csv\") 正 myName = Dir(myPath & "\*.csv") 誤 Set myFile = myFS.CreateTextFile("C:\test.csv\", True) 正 Set myFile = myFS.CreateTextFile("C:\test.csv", True) 全ファイルのヘッダ行をスキップしてますので出力にはヘッダ行が出ません。 改良後の全文を載せておきます。 ・~・・~・・~・・~・・~・・~・・~・・~・・~・・~・ Sub フォルダ指定連結() Dim myShell As Object Dim myFS As Object, myFile As Object Dim myName As String, myPath As String Dim myLine As String, newStr As String Set myShell = CreateObject("Wscript.Shell") myPath = myShell.Specialfolders("Desktop") & "\aaa\" Set myShell = Nothing Set myFS = CreateObject("Scripting.FileSystemObject") myName = Dir(myPath & "\*.csv") Do While myName <> "" Set myFile = myFS.OpenTextFile(myPath & "\" & myName, 1) if newStr = "" then newStr = myFile.ReadLine 'ヘッダのセット else myFile.ReadLine '2個目以降のヘッダ行のスキップ End If Do Until myFile.AtEndOfStream myLine = myFile.ReadLine newStr = newStr & myLine & vbCrLf Loop myFile.Close myName = Dir() Loop Set myFile = myFS.CreateTextFile("C:\test.csv", True) myFile.Write newStr myFile.Close Set myFS = Nothing Set myFile = Nothing End Sub ・~・・~・・~・・~・・~・・~・・~・・~・・~・・~・
その他の回答 (1)
- noah7150
- ベストアンサー率46% (116/251)
間違ったヘッダ行の改行忘れた 誤 newStr = myFile.ReadLine 'ヘッダのセット 正 newStr = myFile.ReadLine & vbCrLf 'ヘッダのセット
補足
早速のご回答ありがとうございます。 ですが・・・・上手くいきませんでした。 もしかしたら、マクロの使い方が間違っているのでしょうか・・・。 「ツール」→【マクロ】→「マクロ名」→【作成】で基本のVB Moduleを開いて、書き込んでいるのですが・・・。 もしよろしければ手順を教えていただけないでしょうか? 後、実は「Set myFile = myFS.CreateTextFile("C:\test.csv", True)」ここは教えていただいたところで意味がいまいちよくわかっていないんです。これの解釈もいただけると非常に助かります。 よろしくお願いいたします。