- ベストアンサー
大量のCSVファイルをExcel形式に変換する
お世話になります。 大量のCSV(.csvファイルをExcel(.xls)ファイルに変換したい と考えております。 リネームソフトを使って、(.csv)⇒(.xls)の一括変換を したところ、拡張子は確かに.xlsに変換されたのですが、 中身はCSVのままとなっておりました。 (↑ファイル名とシート名が同期を取っているので) このCSVを確実にエクセル形式へと変換したいのですが、 どなた様かいいお考えをお持ちでしたら教えてください。 ググってみたところ、そういったアドインがあるのですが、 できれば費用をかけずに行いたいです…。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 すでに、マクロが1つ出ているようですが、私も作ってみました。 これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。 >アドインがあるのですが、 私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの作ったアドインは、押しなべて、あまり出来の良いものが少ないように思います。ですから、なるべく、一般のマクロで解決するように望みます。 '--------------------------------------------------- '<標準モジュール> Sub CSV2XLS() 'CSV を XLS に変換するマクロ Dim myArray() As String Dim FileName As Variant Dim fn As Variant Dim xlFileName As String Dim xlFileBaseName As String Dim TextLine As String Dim FileNo As Integer Dim i As Long Dim k As Long '基本となるフォルダ 'BASE_DIR=""なら、マクロのあるブックと同じ場所のフォルダ Const BASE_DIR As String = "" If BASE_DIR <> "" Then ChDir BASE_DIR Else ChDir ThisWorkbook.Path End If FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv", MultiSelect:=True) If VarType(FileName) = vbBoolean Then Exit Sub End If Application.ScreenUpdating = False For Each fn In FileName On Error GoTo NextStatus With Workbooks.Open(fn) xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & ".xls" Do k = k + 1 '同名の時枝番をつける If k > 3 Then Exit Do If Dir(xlFileName) = "" Then .SaveAs xlFileName xlFileBaseName = Mid$(xlFileName, InStrRev(xlFileName, "\") + 1) Workbooks(xlFileBaseName).Close False k = 0 Exit Do Else xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & "_" & CStr(k) & ".xls" End If Loop End With NextStatus: Next fn Application.ScreenUpdating = True MsgBox "終了しました。",64 End Sub '---------------------------------------------------
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
#5のWendy02です。 コードに間違いがありましたので、訂正を出しておきます。 真中辺りに、以下のようなコードがあります。 On Error GoTo NextStatus × With Workbooks.Open(fn) '間違い ↓ On Error GoTo NextStatus With Workbooks.Open(fn, Format:=2) '正解 でした。
- imogasi
- ベストアンサー率27% (4737/17069)
>リネームソフトを使って、(.csv)⇒(.xls)の一括変換を したところ、拡張子は確かに.xlsに変換されたのですが、 中身はCSVのままとなっておりました。 これにはコンピュターのファイルの拡張子やファイル形式の知識の 欠如を露呈しています。勉強してください。 >をExcel(.xls)ファイルに変換 エクセルのメニューのファイルの開くで読み込ませ、名前をつけて保存すればよい。 エクセルをもっていないという前提ですか。ならば質問に書くべきです オープンオフィスでも入手するとか。 エクセルを通さずに CSV-->ソフト--->エクセル形式ファイル の(エクセルかワークス?以外の)ソフトは素人では作れません。 >確実に この意味はわかりません。不必要な文章部分では。 >大量の エクセルの行数制限以上のものは変換は難しい。
- chie65536
- ベストアンサー率41% (2512/6032)
エクセル本体でマクロを使って出来ます。 「新しいマクロの記録」で、やりたい事を手作業しながらマクロに記録し、記録したマクロを手直しすれば良いのです。 例えば1個のファイルに対しての手順をマクロに記録し、そのマクロを手直しし、100個分繰り返すように書き換えるなどすれば良いのです。 以下のマクロは「新しいマクロの記録」を使って「CSVファイルを開いて、ファイル名とシート名が同期を取っているのをSheet1に変えて、Sheet2とSheet3を追加して、XLS形式で名前を付けて保存して、ファイルを閉じる」と言う操作を記録した物です。 ファイル名部分を変数にしてこのマクロを繰り返し呼ぶとか、必要なだけコピーペーストして全ファイル分だけ繰り返すとか、改造して使ってみて下さい。 Sub Macro1() Workbooks.OpenText Filename:="CSVファイルがあるフォルダ\CSVファイル名.csv", StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1) Sheets("CSVファイル名").Select Sheets("CSVファイル名").Name = "Sheet1" Sheets.Add Sheets("Sheet2").Select Sheets("Sheet2").Move After:=Sheets(2) Sheets.Add Sheets("Sheet3").Select Sheets("Sheet3").Move After:=Sheets(3) ActiveWorkbook.SaveAs Filename:="CSVファイルがあるフォルダ\CSVファイル名.csv", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False ActiveWorkbook.Close End Sub
エクセルはお持ちではないのですか エクセルで読み込めるはず また フリーのオープンオフィスでも 可能
- hana-hana3
- ベストアンサー率31% (4940/15541)
>CSVを確実にエクセル形式へと変換したいのですが、 CSVというのは、テキストファイルです。 拡張子だけを変更してもエクセルファイルにはなりません。 基本的には、CSVファイルをエクセルで読み込んでエクセル型式で保存する事になります。 一括(連続)処理するなら、VBAで処理する事になります。