• 締切済み

excel 2010 VBAについて質問です

複数(約2000ファイル)のcsvファイルのC列だけを抽出してまとめるVGAコード? をしりたいのですがなにか方法はないでしょうか。 例 ファイル名が1.csv~100.csvのファイル 1.csvのc1~c100をa1~a100 2.csvのc1~c100をb1~b100 100.csvのc1~c100をn1~n100 に抽出するようなことをしたいです。 1.csv 2.csv 抽出されたファイル.csv ABCDEF ABCDEF ABCDEF 111 112 12 121 122 12 131 132 12 ・・・ ・・・ 12 ・・・     ・・・ ご回答よろしくお願いいたします。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

白紙ブックをxlsm形式で保存しておく(xlsブックでは2000もデータを並べられないので注意する) 標準モジュールに下記を準備する sub macro1()  dim myPath as string  dim myFile as string  dim buf as string  dim c as long, r as long  mypath = "C:\test\" ’CSVファイルが保存してあるフォルダのパス  myfile = dir(mypath & "*.csv")  do until myfile = ""   open mypath & myfile for input as #1   c = c + 1   r = 0   do until eof(1)    line input #1, buf    r = r + 1    cells(r, c) = split(buf, ",")(2)   loop   close #1   myfile = dir()  loop end sub CSVファイルの保存してあるフォルダを正しく記入し、マクロを実行する。 通常は途中で画面の更新がおかしくなるので、マクロが終了するまで慌てずに待つ。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

Alt+F11でVBEを開き、挿入から標準モジュールを挿入してください。 最下のVBAコードを貼り付けて「設定」の項目より、フォルダパスを設定してください。 (フォルダパスの最後に「\」は付けないでください) 右上の「×」でVBEを閉じて、Alt+F8より「CSV集約」マクロを実行してください。 >複数(約2000ファイル) 最大値の範囲が定かでないため、設定により変更できるようにしています。 ファイル数は2000として設定していますが、最大数が1998~2998など、 最大値が不明であれば3000や4000等最大値以上の値で設定してください。 また、Excel2010で取り扱える最大の列数は16384列ですので、番号はそれ以下でお願いします。 余分に番号を大きく撮りすぎると、その番号までファイルの有無を確認しますので処理時間がかかります。なるべく合わせるようにして下さい。 >1.csv、2.csv、100.csv 1~2000番までのうち、間に無い番号が有る場合、集約先の列は開けて集約するのか左につめて集約するのか設定できます。左に詰める場合は「0」を、列を飛ばす場合は「1」を以下の箇所に設定してください。(初期では1で無い列を詰めずに飛ばして集約しています) Const sw As Integer = 1 ■VBAコード Sub CSV集約() '設定----------------------- 'CSVファイルのあるフォルダパスを指定 Const dpath As String = "C:\フォルダパス" 'CSVファイルの最終番号を指定 Const mno As Long = 2000 '取得するセル範囲を指定 Const tre As String = "C1:C100" 'CSVファイルが無い場合に、集約先の列を左に詰めない場合は1、詰める場合は0 Const sw As Integer = 1 '--------------------------- Dim tbook As Workbook, i As Long, cnt As Long Application.ScreenUpdating = False With ThisWorkbook   For i = 1 To mno     If dir(dpath & "\" & i & ".csv") <> "" Then       cnt = cnt + 1       Set tbook = Workbooks.Open(Filename:=dpath & "\" & i & ".csv")       tbook.ActiveSheet.Range(tre).Copy .ActiveSheet.Cells(1, cnt)       tbook.Close     Else       If sw Then cnt = cnt + 1     End If   Next i End With Application.ScreenUpdating = True MsgBox "終了しました" End Sub

関連するQ&A

  • エクセルのマクロについての質問です。

    ファイルA.xls __A__B__C 1_______1 2_______5 3_______7 4_______4 5_______5 6_______6 ファイルB.csv __A__B__C 1_1__5 2_5__6 3_7__7 ファイルC.csv __A__B__C 1_6__5 2_7__8 3_6__8 のような3つのファイルがあったとして ファイルA.xlsからマクロを実行して __A__B__C 1_1__5__1 2_5__6__5 3_7__7__7 4_6__5__4 5_7__8__5 6_6__8__6 ファイルB.csvをファイルA.xlsのA列とB列に ファイルC.csvをその下の最終行に貼り付けたいと思うのですが どのようにすればいいのでしょうか? 注意点としては、 (1)今は例として3行、3行の6行ですが、実際は1000行以上あり 毎回行数は変わります。 (2)ファイルA.xlsのC列には実際は関数が入っていて、 ファイルB.csvとファイルC.csvを張り付けた情報を計算して表示する ようになっています。

  • 複数CSVファイルをExcel形式1つにまとめたい

    VBA初心者です。 似たような質問・回答がありますが、どうも私の意図するところと異なるので、 新たに質問させていただきます。 どうぞお願いします。 仕事場で、基本1日1ファイル取得している複数のCSVファイルを、 1週間に一度Excelファイルに一週間分のデータを追加し、 最終的には1か月毎に1つのExceファイル(1シート)に集計してます。 全ファイルとも内容は同じで、1シートで作成されており、 タイトル行は1行目、2行目以降データ(行:データ数はファイル毎に異なる)、 列数はA-IV列といった構成になります。 新しい1つのファイルにまとめる際には、 B列とG列のみ抽出し、一行目にタイトル行、2行目からデータ、 最終行に次のファイルのデータと、いうように複数のファイルのデータをつなげて 1つのファイルにしたいのです。 ちなみに出来上がったExcelファイルとしては、 A列に元CSVファイルのB列データ、C列に元CSVファイルのG列データ、 B列に各データがどのCSVファイルの物か分かるように、 各ファイル名の日付にあたる後ろ部分を表示させたいのです。 ファイル名から日付を拾えない場合は、 ファイルをまとめる前に、列を挿入し、 C列にデータ日付の項目を作り、そこに日付を入力し、 まとめる際に、B・C列+G列を抽出、といった形で、まとめられたらと思ってます。 *各Exceファイルのタイトルの後部分がデータの日付を表す (タイトル例:0803abcde2013_08_03.xls) B列2行目以降に、それぞれ抽出したデータのファイル名から、 日付にあたる部分を書き出し(8月3日と言ったように)表示させたい。 場合によっては、前部分を抽出するパターンもあるので、そちらもお願いします。 *今後、他の何種類かの複数CSVファイルでもファイル毎に (こちらも全ファイルとも内容は同じ)同様に1カ月毎にまとめたいので、 違う条件でも抽出できるように、応用できたらと、考えております。 (抽出する列がB列とI列のみ、A~C列+F列など) VBAで作業したいと考えてます。色々とお手数ですが、よろしくお願いします。 また、他にお勧めのサイトや、参考になる質問がありましたら、 合わせて、教えていただけると幸いです。

  • ExcelのVBAに関して教えてください。

    下記のようにCSVファイル名を複数入力してマクロ実行したら転記するようにしたいです。 やり方がわかる人いたら、教えてください。 (1)C10にa、C11にb、C12にc、C13にdを入力 (2)マクロ実行ボタンを押す (3)aのcsvファイルのG12~G36をD10~D34に転記。 ※aのパスは¥¥mm¥nn¥cc¥a.csv  bのcsvファイルのG12~G36をD35~D59に転記。 ※bのパスは¥¥mm¥nn¥yy¥b.csv  cのcsvファイルのG12~G36をD60~D84に転記。 ※cのパスは¥¥mm¥nn¥kk¥c.csv  dのcsvファイルのG12~G36D85~D109にを転記。※dのパスは¥¥mm¥nn¥bb¥d.csv  難しい点は最下層のフォルダが異なっている点です。。  最下層のフォルダ違うが、csvファイルを転記する方法はありませんか?

  • EXCEL- VBA(CSVファイル→インポート)

    A列~F列になる複数(100個以上)のCSVファイルをエクセルファイルにインポートして更に個別にエクセルファイルとして保存したいのですが VBAでできるのでしょうか? 記憶マクロでやったらどうにもうまくいきません。 エクセルのVBAについては ほとんど知識ゼロなので困っております。 大変厚かましくありますが どなた様かご教授お願いできたらと思います!! 【元のファイルの状態】   ◆ファイル名「*.CSV」*は文字数それぞれ違います。   <例:tanaka.xls だったり 09福島.xls>  ◆入っているドライブ   TEXT;C:\Documents and Settings\AA_B\デスクトップ\練習  ◆A~F列にデータが入っている 【やりたいこと】    (1)A~F列はカンマ区切りで全て文字列としたい  (2)元のファイル名でエクセルとして保存したい「*.XLS」

  • VBAを使用したデータの抽出について

    sheet1に下記のような(例)データベースがありA~N列までデータが入力されています。 A B  C  D  E   F  G  H I J  N 1 ○○様 ○○  2名  車   可 東京 *** *** *** 2015/7/1 2 ○○様 ××  3名  車  不可 埼玉 2015/8/1 3 ○○様 ×□  2名  電車 不可 愛知 2015/8/12 4 ○○様 □□  4名  バス  可  新潟 2015/7/13 5 ○○様 ○×  3名  バス  可  宮城 2015/6/1 6 ○○様 ○□  4名  車  不可 大阪 2015/8/21 7 ○○様 □○  2名  バス  可  山梨 2015/8/7 「sheet1」B列のデータを元にして、別シート(sheet2)のA2列に抽出したいもの(例:バス)を入力し、 フォームボタン(例:抽出)で検索し、抽出された結果のsheet1のA列~G列、N列のみ(H列~J列は不要)をSheet2のA11以下へ表示したいと考えています。 A  B  C  D  E   F  G   N 4 ○○様 □□  4名  バス  可  新潟 2015/7/13 5 ○○様 ○×  3名  バス  可  宮城 2015/6/1 7 ○○様 □○  2名  バス  可  山梨 2015/8/7 どのようなVBAのコードを使用すれば良いでしょうか。 宜しくお願いします。

  • 【Excel】 csvファイルを参照し、該当データを表示したい。

    こんにちは csvファイル(商品リスト.csv)に商品リストがあります。 コード 商品名   金額 b32548 あいうえお 10,000 a45687 さしすせそ 20,000 c54842 あいうえお 10,000 ・ ・ 別のExcelファイルのsheet1 A列にコード番号が表示されています。  A   B     C コード 商品名   金額 a45687 c54842 b32548 このB列、C列に、先のcsvファイルの 該当コードにあたる商品名、金額を表示させるには B列、C列の式はどうしたら良いのでしょうか。 完成  A   B     C コード 商品名   金額 a45687 さしすせそ 20,000 c54842 あいうえお 10,000 b32548 あいうえお 10,000 宜しくお願いいたします。

  • VBAでEXCELファイルからデータを抽出する方法

    VBAで、サーバーにある大量のデータを含むCSVファイルから、ある条件に一致するデータを抽出する方法を教えてください。 (例)  コード   名称  在庫数  その他データ  A12300  ○○○  999   XXXXXXXX  A12400  ○○○  999   XXXXXXXX  B12500  ○○○  999   XXXXXXXX  B11100  ○○○  999   XXXXXXXX  C11200  ○○○  999   XXXXXXXX 上記データからコードの一桁目が「A」と「C」のものを抽出する場合の、VBAを教えてください。 抽出後、EXCELの別ファイルに上書き保存します。 デイリーで処理をするので、VBAで自動化したいのです。 よろしくお願い致します。

  • csvファイルを開かずに文字を検索し行を抽出したい

    フォルダの中に複数のCSVファイルが有ります。 これらのファイルを開かずに文字列を検索し、検索対象の文字と完全一致する 文字がある行をまとめてひとつのファイルに抽出する方法を探しています。 例:Aフォルダ内にファイル1、ファイル2、ファイル3、、、と複数のファイルがある。 ファイルのフォーマットはすべてCSV。ファイルにはシートは一つのみ。日付なのですべて異なります。       A         B  C   D   E   F  G   H   I   J  K   L 加工年月日時分 品種 コード A列 B列 C列 D列 E列 F列 G列 本数 作業者    ・    ・    ・ A~Lまであり、Cのコードが指定した検索文字と完全一致するものを抽出したいです。 急ぎの内容の為、VBAやコマンドプロンプトなど、自分なりに色々なサイトにある プログラムを組み換えようとしましたが初心者の為すぐに理解して応用はとても 無理でした。知恵を貸して頂きたいです。

  • Excel VBA 2つの条件を満たした行を削除

    Excel2003を使用しています。 CSVファイルを元にデータを作りたく、まずは不要なデータを削除しています。 J列=0の行とJ列=0の行のA列の値と同じ値がA列に入力されている行を削除したく、J列=0のA列の値を一旦別シートに抽出し、その抽出したデータとA列のデータをループして、一致したら削除というコードを書きました。 もし可能であれば、一旦別シートに抽出せずに処理したいのですが、その場合、どのようにコードを書けばいいでしょうか? よろしくお願いします。

  • EXCEL VBAについて

    VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます      A     B     C      D 1  ID     店名   売上    日付 2 1104567   渋谷店  190,809   11/21 3 1102031   新宿店  209,808   11/21 4 1103450   横浜店  108,765   11/21 BOOK2・集計      A    B    C       D       E 1  ID   店名   11/21    11/22     11/23 2 1104567  渋谷店  190,809   203,487 3 1102031  新宿店  209,808   340,876 4 1103450  横浜店  108,765   547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?

専門家に質問してみよう