フォルダ内のExcelファイルを全てcsv変換

このQ&Aのポイント
  • Excelファイルを全てcsvに変換する方法はありますか?
  • フォルダ内の全てのExcelファイルをcsvに変換する方法を教えてください。
  • Excelファイルをcsvに変換するプログラムを使っていますが、フォルダ内のExcelファイルを一括で変換する方法を知りたいです。
回答を見る
  • ベストアンサー

フォルダ内のExcelファイルを全てcsv変換

初めまして。 現在Excelにマクロを組み込み、ボタンを押すと5行目以下が csvファイルとして出力されるというプログラムを使っております。 しかしながら、多数のExcelファイルでこの作業をする必要が生じました。 そのため、フォルダ内の全てのExcelファイルに同じこと (5行目以下をcsvファイルとして出力)をしたいのですが、 もしそのやり方をご存知でしたらお教えいただけませんでしょうか。 念のため現在使っているExcelマクロを記載致します。 Private Sub Workbook_Open() ActiveWindow.ScrollRow = 1 MsgBox "Workbook_Openイベントが発生しました。" Call AddMenu End Sub Sub AddMenu() Dim NewM As Variant, NewC As Variant Set NewM = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup) NewM.Caption = "変換ツール(&G)" Set NewC = NewM.Controls.Add With NewC .Caption = "csv書き出し(&R)" .OnAction = "henkan_conb" .BeginGroup = False .FaceId = 271 End With End Sub Sub henkan_conb() Sheets("sheet1").Select Rows("1:4").Select Selection.Delete Shift:=xlUp Row = 1 Do Until Cells(Row, 1) = "" Row = Row + 1 Loop If Cells(Row, 1) = "" Then Rows(Row).Select Selection.Delete Shift:=xlUp End If Range("A1").Select ActiveWorkbook.SaveAs Filename:= _ "C:\file.csv", _ FileFormat:=xlCSV, CreateBackup:=False End Sub

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

  • ベストアンサー
回答No.1

考え方だけね。 VBA コードを仕込むブックと、CSV の元になる多数のファイル(5行目以降にデータが書いてあるブック)とを分けて考える。 つまり、「プログラム」「データ」「出力物」にわけて考える。 大まかな流れは 1. プログラムブック(prog.xls)で、フォルダを指定して実行。 2. 指定されたフォルダにあるブックを 1冊ずつ開いては閉じる。 3. (2) の中で、5行目以降を CSV に出力する。 4. (2)(3) を最後のブックまで実行。 使うテクニックとしては、 1. 他のブックを開いたり閉じたりする。 2. オブジェクト変数に慣れる。 ブックやシートにアクセスする際に Workbook 型や Worksheet 型の変数を使うと非常に便利。 (1) の開くタイミングで、開いたブックを Workbook 型の変数で参照する。 目的のシートを(「左から数えて何番目」か「固定のシート名」を頼りにして)Worksheet 型の変数で参照する。 3. あるフォルダ内のすべてのブックのファイル名を取得できるようにする。 4. シートの内容を CSV に出力できるようにする。 がんばってください。

keisuke738
質問者

お礼

ありがとうございます! やってみます!

関連するQ&A

  • csvファイルを取り込み指定の形式にする

    EXCELでcsvファイルを取り込み指定の形式にして、csvファイルとして 保存するマクロを組みたいです。 途中までマクロの記録機能を使い作ったものです。 Sub csvファイルの取り込み() 'Windows("a.csv").Activate '←ここでファイルを選択する形式にしたい。 Columns("C:H").Select Selection.ClearContents Columns("A:A").Select Selection.Delete Shift:=xlToLeft Range("A1").Select ActiveCell.FormulaR1C1 = "Number" Rows("2:2").Select Selection.Delete Shift:=xlUp Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="<>C*", Operator:=xlOr, _ Criteria2:="=C1*" ', Operator:=xlOr, Criteria2:="=AABC*" Rows("4:13").Select '←ここをフィルタで選択された行を削除するように変更したい。 Selection.Delete Shift:=xlUp Selection.AutoFilter Field:=1 Range("A1").Select End Sub マクロの流れとして ・まずcsvファイルを取り込む ・C列からH列までを削除(もしくは数値をクリア) ・その後、A列を削除 ・A1セルに文字があるのでその文字を"Number"に変更 ・A列にある指定の文字列をフィルタで抽出してその行を削除  (抽出文字列は以下の3パターン。) Cで始まらない文字を抽出 or C1で始まる文字を抽出 or AABCで始まる文字を抽出 ・以上の作業を終了したら取り込んだファイル名の 左から11文字+"ABC"の文字をあわせてファイル名として CSVファイルで保存する 長くなってすいません。助けてください

  • excelのセル複数削除について

    2箇所の範囲を削除したいのですが、 Rows("188:247").Select Selection.Delete Shift:=xlUp Rows("311:373").Select Selection.Delete Shift:=xlUp とすると最初に削除されるとRowがずれてしまって、 次のRows("311:373").Selectがうまく削除できません。 2つを同時に削除することは可能でしょうか? 最大で3つまで削除を考えています。 どうぞよろしくお願い致します。 excel2000です。

  • 同じ場所にあるファイル全てに対してマクロをかけたい

    <やりたいこと> マクロと同じフォルダに入っている全ファイル(そのときによりファイル数が変わる)に対し、 1、2行を削除し、オートフィルタを消し、A2にある「No.1」を「No1」(ドットを消す)にし、 ファイルを上書き保存するようにしたいです。 <今の状態と質問> 全ファイル(例は4つ)を開いた状態で下記のマクロをかければ、 希望の処理ができます。 が、複数ファイルが有る場合、ファイル全てを開いて実行するのは難ありです。 事前にファイルを開く手間をかけずに、マクロで全て処理する方法は どうしたらいいのでしょうか。 過去検索で、Workbooks.Open Filename:= (ThisWorkbook.Path & "\*.xls")などを 見よう見真似で追加したりしてみたものの動きませんでした。 今の段階(4ファイル開いておけば実行可能)のマクロは下記の通りです。 Sub test() ' ' Keyboard Shortcut: Ctrl+q ' Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close Rows("1:2").Select Selection.Delete Shift:=xlUp Selection.AutoFilter Range("A1").Select ActiveCell.FormulaR1C1 = "No1" Range("A2").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • excel マクロ

    EXCELでデータが100行の表があるとする。 データのない行を削除し行を詰めるマクロは? イメージはこんな感じとおもうのでうが Sub Macro1() 'if文であるn行がデータがないかどうか判定YESなら Rows("n:n").Select Selection.Delete Shift:=xlUp End Sub

  • Excel VBAについてお願いします 

    Excelにて複数のCSVファイルを読み込んでいます。 現在使用している物は、同フォルダ内にあるcsvファイルをすべて選択しています。 そこで、毎回同じフォルダ内のcsvファイルを選択を自動化にしたいと思っています。 Const MyFol As String = "C:\AAA\AAAA\"などフォルダを固定したいです。 現在使用している物にどのように追加、変更すれば良いでしょうか?ご伝授願います Sub CSV取り込み() Dim csvFile As Variant Dim fIdx As Long Dim lngTmp As Long Dim dCell As Range csvFile = Application.GetOpenFilename(FileFilter:="CSVファイル,*.csv", MultiSelect:=True) Select Case TypeName(csvFile) Case "Variant()" If Cells(Rows.Count, 1).End(xlUp).Row = 1 Then lngTmp = 0 Else lngTmp = 1 End If For fIdx = 1 To UBound(csvFile) Set dCell = Cells(Rows.Count, 1).End(xlUp).Offset(lngTmp, 0) With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & csvFile(fIdx), Destination:=dCell) .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False End With If lngTmp = 1 Then dCell.EntireRow.Delete lngTmp = 1 Next Range("A1").AutoFilter field:=Range("O:O").Column, Criteria1:="=9" Range("2:" & Rows.Count).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp Range("A1").AutoFilter Set dCell = Nothing Case Else MsgBox "キャンセル、または不正な操作が行われました" End Select End Sub どうか自動読み込みできるようお願いします。 追加で、処理終了ご『処理完了』などのメッセージがあれば、最高です よろしくお願いします

  • 複数のCSVファイルを自動でエクセルに変換したい

    フォルダの中に、300近いCSVフォルダがあります。 ネットで探したマクロVBAでやってみたところ、一つのCSVファイルを選び、それをエクセルファイルに変換できました。 このマクロを使って、フォルダ内にあるすべてのCSVファイルを一気にエクセルに変換するには、どうしたらいいのでしょうか。 ご教授のほど、よろしくお願いいたします。 Sub CSVからXLSX() Dim varFileName As Variant varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName = False Then Exit Sub End If Workbooks.Open Filename:=varFileName ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.Cells ActiveWorkbook.Close SaveChanges:=False End Sub

  • EXCEL VBA 早く処理をする

    よろしくお願いします 下の構文を標準モジュールに書き込み、callで実行しているのですが 処理に時間がかかります。 処理を早くする方法と構文の簡素化のご教示をお願いします。 Application.ScreenUpdating = False For i = 1 To 12 With Worksheets(i) .Select LastRow = .Range("A150").End(xlUp).Row + 1 .Range("A8:G" & LastRow).Sort Key1:=Range("A8"), order1:=xlAscending .Range("G8:G" & LastRow - 1).Formula = "=G7+E8-F8" LastRow = .Range("A150").End(xlUp).Row + 1 .Range("A" & LastRow).Select Dim EndRow As Long EndRow = .Range("A" & Rows.Count).End(xlUp).Row Cells(Rows.Count, 1).End(xlUp).Offset(1, 3) = .Name & "合計" Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) = Application.WorksheetFunction.Sum(Range("E7:E" & EndRow)) Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) = Application.WorksheetFunction.Sum(Range("F7:F" & EndRow)) Cells(Rows.Count, 1).End(xlUp).Offset(2, 3) = "前月繰越" Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) = .Range("G7") Cells(Rows.Count, 1).End(xlUp).Offset(2, 5) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 4) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 3) = "次月繰越" Cells(Rows.Count, 1).End(xlUp).Offset(4, 3) = "合計" Cells(Rows.Count, 1).End(xlUp).Offset(3, 5) = Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) - Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) Cells(Rows.Count, 1).End(xlUp).Offset(4, 4) = Cells(Rows.Count, 1).End(xlUp).Offset(2, 4) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 4) Cells(Rows.Count, 1).End(xlUp).Offset(4, 5) = Cells(Rows.Count, 1).End(xlUp).Offset(3, 5) + Cells(Rows.Count, 1).End(xlUp).Offset(1, 5) Cells(Rows.Count, 1).End(xlUp).Offset(1, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(2, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(3, 6) = "" Cells(Rows.Count, 1).End(xlUp).Offset(4, 6) = Cells(Rows.Count, 1).End(xlUp).Offset(0, 6) .Range("C7").End(xlDown).Select Selection.Offset(4, 2).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 2).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(4, 3).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 3).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(4, 4).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(4, 4).Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Offset(0, 2).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 2).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 2).Borders(xlEdgeBottom).Weight = xlThin Selection.Offset(0, 3).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 3).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 3).Borders(xlEdgeBottom).Weight = xlThin Selection.Offset(0, 4).Borders(xlEdgeTop).Weight = xlHairline Selection.Offset(0, 4).Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Offset(0, 4).Borders(xlEdgeBottom).Weight = xlThin End With Next i Application.ScreenUpdating = True

  • excel 2003でCSVファイルを読み込むVBA

    現在CSVファイルを読み込むマクロを作成してますが、レベルが低く下記載のコードで作業を行ってます。 皆様の技術をお借りしたいので、ご教授宜しくお願い致します。 ※現在のコードです。 CommandButton1でフォルダーを開いてcsvファイルを選択し、toolをsheetに追加してます。それから、CommandButton3で追加されたtoolからB14:C14)を選択し最終行までコピーしSheet1の(B12)に数値のみを貼り付けています。 結構手間が係り作業に時間がかかってしまいます。 そこで、改良をしたいと思いますのでご教授お願い致します。 ※改良したいポイント (1)同じフォルダー内のTOOL.CSVをフォルダーを開かず直接commandButton1でSheetに追加する。 (2)Sheet2にコピーされたデーターから(B14:C14)を選択し最終行までコピーしSheet1の(B12)に数値のみを貼り付ける。 (commandButton3はなくしたいと思ってます) 以上です。 宜しくお願い致します。 --------------------------------------------------------- Private Sub CommandButton1_Click() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Myname = ActiveWorkbook.Name CSV_Filename = Application.GetOpenFilename("CSVファイル(*.CSV;*.prn),*.CSV;*.prn", , "CSVファイルを開く") If CSV_Filename = False Then Exit Sub Workbooks.Open CSV_Filename CSV_SheetName = Worksheets(1).Name Sheets(CSV_SheetName).Move after:=Workbooks(Myname).Sheets(Sheets.Count + 1) Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub ---------------------------------------------------------------- Private Sub CommandButton3_Click() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Sheets("(TOOL)").Select Sheets("(TOOL)").Range("B14:C14").Select Sheets("(TOOL)").Range(Selection, Selection.End(xlDown)).Select Selection.copy Sheets("CSV Road").Select Sheets("CSV Road").Range("B12").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub -------------------------------------------------------------

  • エクセルと同じファイル名でcsvを作成するマクロ

    エクセルからCSVファイルをYYMMDD付でマクロを使って 作ろうとしていますが拡張子の「.xls」がどうしても残ってしまいます。 例えば、「test.xls」が「test.xls070326.csv」のように。 これを「test070326.csv」とするにはどうしたらよいでしょう。 今のコードはつぎのようにしています。 Sub test1() Dim flname As Variant Dim wb As Workbook flname = ActiveWorkbook.Name + CStr(Format(Date, "yymmdd")) ActiveSheet.Copy ActiveSheet.SaveAs Filename:=flname, _ FileFormat:=xlCSV ActiveWindow.Close savechanges:=False ActiveWorkbook.Close End Sub これでもCSVとしては使えるのですが、気持ちがすっきりしません。 どなたか正解をお願いします。

  • for next教えて下さい(;_;)

    以下のように1行残して9行消してという操作を連続してやりたいのですがfor nextをどう使えばうまくいくのかわかりません。誰か教えて下さいお願いしますm(_ _)m Sub Macro1() ' ' Macro1 Macro ActiveWindow.SmallScroll Down:=5 Rows("10:18").Select Selection.Delete Shift:=xlUp Rows("11:19").Select Selection.Delete Shift:=xlUp End Sub

専門家に質問してみよう