• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAについてお願いします )

Excel VBAで複数のCSVファイルを自動読み込みする方法

このQ&Aのポイント
  • Excel VBAを使用して、特定のフォルダ内の複数のCSVファイルを自動的に読み込む方法をご紹介します。
  • VBAコードを使用して、選択したCSVファイルのパスを取得し、それぞれのファイルを順次読み込んでいきます。
  • また、処理終了時には『処理完了』といったメッセージを表示することも可能です。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.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 人のプログラムを見て解析するのは大変なんです。文章でもどうなって欲しいか書いて欲しいです。 これでだめなら、サンプルデータと、どうなってほしいという結果を、あげていただけませんか。

akimoto1006
質問者

お礼

SI299792 様 回答ありがとうございました。 どうしたいのか内容が伝わらない言葉足らずですいませんでした。 ですが、私の思い通りのVBAになっています。 本当にありがとうございました。

その他の回答 (3)

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

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1033916180など見ればわかる。ここは、Googleで「同一フォルダーのCSVファイルを処理」で検索したら出てきた。もっとGoogle照会など、活用するべし。 ーー 要点は、ベストアンサーの中の、 >For Each FL In FLS ' コレクションを構成するファイルをひとつずつ処理 にある。 ファイルやフォルダの処理には、VBSCRIPTに勉強を広げることを勧める。

  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.2

' 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は勝手に回答を改ざんします。この回答も改ざんされて、プログラムが動かなくなる可能性があります。

akimoto1006
質問者

補足

回答ありがとうございます。 ファイルを選択なしで読み込む事ができました。 ですが、使用していた物は各CSVファイルは2行になっていて(項目、Date)一行目のみ項目がはいり2行目以降はDateが読み込まれていました。 なんとか今までの処理内容の自動ファイル読み込みとはならないでしょうか? よろしくお願いします。

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

> Const MyFol As String = "C:\AAA\AAAA\"などフォルダを固定したいです。 csvFile = Application.GetOpenFilename の前に ChDrive "C" 'もし必要なら ChDir MyFol としておけばいかがでしょう。 > 追加で、処理終了ご『処理完了』などのメッセージがあれば、最高です 例えば Set dCell = Nothing の後に MsgBox "処理完了" としておけばいかがでしょう。

関連するQ&A