- ベストアンサー
Excel VBAで複数のCSVファイルを自動読み込みする方法
- Excel VBAを使用して、特定のフォルダ内の複数のCSVファイルを自動的に読み込む方法をご紹介します。
- VBAコードを使用して、選択したCSVファイルのパスを取得し、それぞれのファイルを順次読み込んでいきます。
- また、処理終了時には『処理完了』といったメッセージを表示することも可能です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>一行目のみ項目がはいり2行目以降はDateが読み込まれていました。 意味が解らないのですが。 前は何も考えずに、ただ結合するだけのプログラムを作ってしまいました。 プルグラムをよくみると、2つ目以降のファイルは、1行目を削除しています(多分ヘッダーでしょう)また、O列が9のものを削除しています。この機能を追加しました。 ' Option Explicit ' Sub CSV取り込み() ' Const MyFol As String = "C:\Users\MA\Desktop\My Documents\質問解答\OKWAVE" Dim csvFile As String Dim lngTmp As Integer Dim dCell As Range ' ChDrive MyFol ChDir MyFol Cells.ClearContents lngTmp = 0 csvFile = Dir("*.csv") ' While csvFile > "" Set dCell = Cells(Rows.Count, "A").End(xlUp).Offset(lngTmp, 0) With ActiveSheet.QueryTables.Add _ (Connection:="TEXT;" & csvFile, Destination:=dCell) .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False End With ' If lngTmp = 1 Then dCell.EntireRow.Delete End If lngTmp = 1 csvFile = Dir Wend Range("A1").AutoFilter field:=Range("O:O").Column, Criteria1:="=9" Range("2:" & Rows.Count).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp Range("A1").AutoFilter MsgBox "処理完了" End Sub 人のプログラムを見て解析するのは大変なんです。文章でもどうなって欲しいか書いて欲しいです。 これでだめなら、サンプルデータと、どうなってほしいという結果を、あげていただけませんか。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1033916180など見ればわかる。ここは、Googleで「同一フォルダーのCSVファイルを処理」で検索したら出てきた。もっとGoogle照会など、活用するべし。 ーー 要点は、ベストアンサーの中の、 >For Each FL In FLS ' コレクションを構成するファイルをひとつずつ処理 にある。 ファイルやフォルダの処理には、VBSCRIPTに勉強を広げることを勧める。
- SI299792
- ベストアンサー率47% (772/1616)
' Option Explicit ' Sub CSV取り込み() ' Const MyFol As String = "C:\Users\MA\Desktop\My Documents\質問解答\OKWAVE" Dim csvFile As String Dim lngTmp As Integer Dim dCell As Range ' ChDrive MyFol ChDir MyFol Cells.ClearContents lngTmp = 0 csvFile = Dir("*.csv") ' While csvFile > "" Set dCell = Cells(Rows.Count, "A").End(xlUp).Offset(lngTmp, 0) With ActiveSheet.QueryTables.Add _ (Connection:="TEXT;" & csvFile, Destination:=dCell) .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False End With lngTmp = 1 csvFile = Dir Wend MsgBox "処理完了" End Sub なお、OKWAVEは勝手に回答を改ざんします。この回答も改ざんされて、プログラムが動かなくなる可能性があります。
補足
回答ありがとうございます。 ファイルを選択なしで読み込む事ができました。 ですが、使用していた物は各CSVファイルは2行になっていて(項目、Date)一行目のみ項目がはいり2行目以降はDateが読み込まれていました。 なんとか今までの処理内容の自動ファイル読み込みとはならないでしょうか? よろしくお願いします。
- f272
- ベストアンサー率46% (8467/18126)
> Const MyFol As String = "C:\AAA\AAAA\"などフォルダを固定したいです。 csvFile = Application.GetOpenFilename の前に ChDrive "C" 'もし必要なら ChDir MyFol としておけばいかがでしょう。 > 追加で、処理終了ご『処理完了』などのメッセージがあれば、最高です 例えば Set dCell = Nothing の後に MsgBox "処理完了" としておけばいかがでしょう。
お礼
SI299792 様 回答ありがとうございました。 どうしたいのか内容が伝わらない言葉足らずですいませんでした。 ですが、私の思い通りのVBAになっています。 本当にありがとうございました。