• 締切済み

エクセルVBAで複数CSVを抽出、ブックへの出力

エクセルVBAで複数のCSVファイルからファイル名と 任意のセル8箇所を自作した計算シートに抽出。 別ブックにCSVファイル名 計算結果4種類を出力する。 というvbaを作りたいのですがどうすればよいでしょうか? CSVファイルが1700ほどあり、大変困っています。 申し訳ありませんがご教授願います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーー 詳細 CSV読み込みセル8箇所:B2、D2、F2~P2 自作計算シートへの貼り付け箇所:G3~G10 計算結果セル抽出箇所:C8~F4 出力の理想系は CSVファイル名、計算結果1、2、3、 4の順で file01 ○○ ○○ ○○ ○○ file02 ○○ ○○ ○○ ○○ ・・・ ・・ のようになれば大変嬉しいです。 お力をお貸しください よろしくお願いいたします。

みんなの回答

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

したいことだけ、それも不完全に書いているだけで、コードを回答者に書いてください、と言わんばかりの質問。丸投げは禁止。 ーー 必要な(小分けした)処理単位に、文章でまず分割列挙してみること。(この分類するにもコンピュタ処理経験は要るが、できる範囲からやってみないと) >1700ほどあり これを捉えるのは、どういう特徴で捉えるのか。1つのフォルダなどにまとまって入っていて、対象外のCSVファイルが混じっていないとか。(質問にこれを書いてないのは、経験不足) そのフォルダの中にエクセルファイルが混じっている程度なら、拡張子xlsのファイルを飛ばしCSVだけ選ぶのは簡単。 だいたい1700個(1ファイルの行でなく)ものCSVを作ることそのものが、あとの処理のことを考えてない。いったん、1700CSV-->1CSVにまとめて、それからまとまった1ファイルで考える手もある。まさか1700CSVの列構成(フォ-マット)が別々ってこと無いでしょうね。 (1)1フォルダに有るCSVファイルを1つつ、かつ、もらさず2度読みせず読む方法(コード)For Eachとか繰り返しで処理になろう。 Googleで照会すれば、この例がたくさん例が出るのだ。知らないのかな。 もし他種類のファイルがあれば処理を飛ばす方法 (2)読んだCSVのファイル名を捉える方法ーー>そしてエクセル・シートに書き出す方法。 (3)1つ(レコード)のCSVファイルを読む方法 質問者はエクセルにCSVファイルを1つ読み込んで8項目を判別すると考えているようだが、CSVファイルを配列変数に読み込み そこで8項目を選んだほうが良い。項目に分割するにはSplit関数という便利な関数がある。 (3)読んだとき列(フィールド・項目)データに分割して捉える方法(そうしないと8箇所が判別できない)前述のSplit関数で配列に収納するとインデックス番号で指定。 (4)列を判別ーー>必要なデータ項目を捉える。-->エクセルのシートに書き出す方法 8項目はどう捉えるか質問に書いてない。質問がすきだらけ。 >任意のセル8箇所、なんて、任意とはおかしいのでは。必ずランダムにしろルールが有るはず。軽々しく「任意」を使わないこと。 >A任意のセル8箇所を自作した計算シートに抽出。 B別ブックにCSVファイル名 4種類を出力する (抽出とはどういう条件で?計算結果とはどういう計算?) は2処理有るようだが、質問者のレベルではAとBは別けて独立させてコードを考えたら(実行は2回)どうかな。 現在の質問者には、まだそこまで行ってないと思う。 WEBで上記を1つづつ調べるか、改めて細分して具体的に絞って 別質問にしたらどうです。 ーーー Googleで照会をお勧め用語を挙げておく VBA フォルダ ファイル 捉える VBA Split関数 CSVファイル 読み込み VBA http://www.k1simplify.com/vba/tipsleaf/leaf291.htmlほか VBA フォルダ 拡張子 選択 などで調べまくること

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

サンプルコードを書いてみようと思いましたが、情報不足や理解できない点が多すぎて回答できません。 > CSVファイルが1700 対象はすべて一つのフォルダーにはいっているのですか? また、その場合、対象以外のCSVファイルが混在したりしませんか? > CSV読み込みセル8箇所:B2、D2、F2~P2 セルが13個ですが?Σ( ̄ロ ̄lll) > 自作計算シートへの貼り付け箇所:G3~G10 縦に変換しても8個しかはいらないので、上記F2~P2は、~K2までの誤りですか? また、CSVファイルが複数なら、常にG3~G10に貼り付けたら上書きされてしまいますよね? どうするのでしょう? > 計算結果セル抽出箇所:C8~F4 他に説明がないので意味が不明です。ヽ(´▽`)/ それに、C8~F4?普通はC4からF8と書きませんか? > 出力の理想系は > CSVファイル名、計算結果1、2、3、 4の順で > file01 ○○ ○○ ○○ ○○ これが、計算結果セル抽出箇所の例だとしたら、ひょっとしてC8~F8、あるいはC4~F4の誤り? 「質問」の理想系は、必要事項を洩れなく正確に書いていただきたいのですが・・・・ o(^-^)o

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

まず、 ・新規Bookを作成 ・1つのCSVファイル開く ・計算用ブックに貼付ける ・計算結果を新規Bookに貼付ける などをマクロの自動記録でやってみるとか。 そうでなければ、ある範囲のセルをどのセルに貼付け、計算結果のセル範囲を どのような順序で転記していくのか不明な気がしますけど。 例: >CSV読み込みセル8箇所:B2、D2、F2~P2 B2、D2、F2~P2はセル数13個ですし。 (5個の行き先又は除外条件が不明)

関連するQ&A

  • VBAマクロでCSV出力

    はじめまして、よろしくお願いします。 ExcelのVBAマクロで 特定のセルの範囲を「シート名.csv」で出力するようなプログラムを書きたいです。 例)シート名「TEST」内にあるマクロボタンを押すと  A1:A10のセルの内容が「TEST.csv」(アスキー形式ならなんでも)  に出力される。 どういうやり方があるか、お勧めのサイト等、 ご教授いただけないでしょうか? 以上、よろしくお願いいたします。

  • 複数のCSVファイルからのデータ取得(VBA)

    エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を ご教授お願います。 エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを 取得し転送する方法を考えていますが、どうもうまくいきません。 たとえば、 CSVファイル(1) A5(A)           A10(B) CSVファイル(2) A5(C)           A10(D)      CSVファイル(3) A5(E)           A10(F)         ・      ・      ・ と、指定されたセルからデータを取得し、 エクセルの指定シートの表に                    CSVファイル                                 (1)  (2)  (3) ・ ・ ・ ------------------------------------------- A5から取得したデータ    A   C   E ・ ・ ・ A10から取得したデータ    B   D   F ・ ・ ・ ------------------------------------------- と、いうように転送して貼り付けていきたいです。 いろいろ調べてみたのですが、このような方法が見つけられませんでした。 ぜひ、皆様のお知恵をお貸しください。 宜しくお願い致します。

  • エクセルVBAでテキストを出力したい

    エクセルVBAでテキストを出力したいのですが、 やり方がわからないので教えてください。 仮にSheet2のA列に文章があるとして、 シート全体を1つのテキストファイルとして出力し、 ファイル名をSheet1のA1セルにしたいです。 同じような質問もあるのですが、ファイル名に関しては、 ちょっと見当たらなかったので質問しています。

  • Excelの複数シートからcsvファイルを出力

    Dim objXL Dim f Dim m Dim ws Set objXL=CreateObject("Excel.Application") 'objXL.Visible=True objXL.DisplayAlerts=False For Each f In WScript.Arguments objXL.WorkBooks.Open f For Each ws In objXL.ActiveWorkBook.Worksheets If ws.UsedRange.Rows.Count=1 and ws.UsedRange.Columns.Count=1 and ws.Cells(1,1)="" Then 'MsgBox ws.Name&"Empty" Else ws.SaveAs f & "." & ws.Name & ".csv", 6 End If Next objXL.ActiveWorkBook.Close Next objXL.Quit WScript.Quit 上記スクリプトファイルで ファイル名が「[元Excelファイル名].[シート名].csv」 のcsvファイルが出力されますが、これを ファイル名を「[シート名].csv」にするには どのようにすればいいのでしょうか。 ws.SaveAs f & "." & ws.Name & ".csv", 6 の箇所を ws.SaveAs ws.Name & ".csv", 6 に変更したのですが、うまくいきませんでした。

  • エクセルVBAでCSVを読み込んで別ファイルにまとめたいです。

    エクセルVBA初心者の者です。 マクロの記録でできたコードをいじって、 なんとか動くものができるレベルです。 Aというフォルダに20~40行程度の内容のCSVファイルが 数百個あります。開けてみないと何行あるのかわかりません。 そのAフォルダのCSVの内容をエクセルで開いて、別のエクセルファイルの一枚のシートにまとめたいのです。 最初にCSVファイル名を一枚のシートのA列に書き出すところ まではやれたのですが、それを順番に読み込んでコピペの 流れができません。 CSVファイル名読み込み 読み込んだファイル1つめCSV開く CSVの20~40行をコピー 別のエクセルファイルのシートに貼り付け 1つめCSV閉じる ↓ 読み込んだファイル2つめCSV開く 繰り返し こういうやり方じゃない方がいいのかもわかりません。 もしかして考え方も違うのでしょうか? サンプルコード教えていただけるとありがたいです。 よろしくお願いします。

  • エクセルVBA ブック出力方法について(2)

    いつもお世話になっています。 以前にも同じ内容の質問をさせて頂いた者です。 回答を頂きましたが、当方説明不足および勉強不足のため、 再度質問させて頂きます。 元のファイルから、特定のセル部分のみを出力先ファイル(新規.xls)へブック出力したいのですが 方法がわかりません。 当方にて記述したVBAは以下ですが、満足のいく作成ができておりません。 矛盾および誤りを指摘できる方はご指摘頂けないでしょうか。よろしくお願いします。 Sub ブック出力() Sheets("Sheet1").Select Sheets("Sheet1").Range("リスト").Copy Sheets("Sheet1").Range("A1:J12").Paste Workbooks.Add ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\新規.xls" End Sub ※リスト→出力元ファイルのA1:J12までの範囲 ※出力元ファイル、出力先ファイルのシート名は不変です。(両方ともsheet1) ※出力先セル、出力元セルともに範囲は同じです。(両方ともA1:J12)

  • Excelシートを分割してcsvに出力するVBA

    すいませんが、ご教示願います。 パソコンExcelのVBAです。 Excelファイルシートの24,000行あるデータを、 任意に選択した範囲(例えば2行目から3,000行目)をcsvデータに出力する VBA構文が知りたいです。 どなたかおわかりになりますでしょうか。

  • VBAを利用したCSV出力

    現在エクセル2003のVBAを使用して、シートの内容をcsvファイルに出力するマクロを作成しています。 Sheet1にこのマクロを動作させるボタンがあり、Sheet2の内容を出力したいと考えています。 しかし、ネットで探したところ、ほとんどのものが、Sheet1も内容を出力するマクロで、Sheet2の内容の出力の仕方がわかりません。 どなたかマクロの書き方、もしくはサンプルコードのあるサイトなどご存知の方がいらっしゃったっら教えていただけないでしょうか?

  • EXCEL VBAでのCSVファイル読み込み、出力で困っています。

    EXCEL VBAでのCSVファイル読み込み、出力で困っています。 データ3件のファイルから3件抽出すると正常にイミディエイトウィンドウへ表示されるのですが データ約38,000件のファイルから3件抽出すると文字化けする項目があるのです。 文字化けする項目の共通点は256文字以降が、どうやら化けているようです。(長文1、長文2の項目) 教えて!goo でいろいろ探してみましたが、これといった解決策が見つかりませんでした。 また、抽出データをCSVで出力しているのですが 始まりと終わりに " が出力されるので困っています。 " が出力されないようにできるのでしょうか? 当方、COBOLでのコーディング経験は実務で4年ほどありますが VBAの知識は学校で少し学んだ程度の初心者です。 わかりやすく教えていただけないでしょうか? sample1.csv データ3件 sample2.csv データ約38,000件(ここにsample1.csvと同じデータが含まれています) Dim adoCON As New ADODB.Connection Dim adoRS As New ADODB.Recordset Dim rec As String 'ADOを使い読み込み専用モードでCSVファイルを扱う準備(オープン)をします adoCON.Open "Driver={Microsoft Text Driver (*.txt; *.csv)}; " & _ "DBQ=c:\Documents and Settings\デスクトップ\test;" & _ "ReadOnly=1" Open "C:\Documents and Settings\デスクトップ\test\test.csv" For Output As #1 'SQLを実行し、指定したIDのデータを抽出します 'ID,名前,,,,,,,,,,,長文1,長文2,,,,,,更新日時 ←こんな感じで20項目 Set adoRS = adoCON.Execute("select * from sample1.csv where (ID = 213428) or (ID = 212717) or (ID = 212917)") 'SQLの実行結果をデータが無くなるまでrecへ格納します Do Until adoRS.EOF = True rec = rec & adoRS("ID") & "," & adoRS("名前") & "," & adoRS("長文1") & "," & adoRS("長文2") & Chr(10) 'カーソルを次の行へ adoRS.MoveNext Loop 'recの内容をイミディエイトウィンドウへ表示 Debug.Print rec 'recの内容を出力 Write #1, rec 'CSVファイルをクローズします Close #1 'レコードセットをクローズします adoRS.Close 'データベースのクローズ adoCON.Close

  • 複数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で作業したいと考えてます。色々とお手数ですが、よろしくお願いします。 また、他にお勧めのサイトや、参考になる質問がありましたら、 合わせて、教えていただけると幸いです。

専門家に質問してみよう