プロが教えるわが家の防犯対策術!

お世話になります。
大量のCSV(.csvファイルをExcel(.xls)ファイルに変換したい
と考えております。
リネームソフトを使って、(.csv)⇒(.xls)の一括変換を
したところ、拡張子は確かに.xlsに変換されたのですが、
中身はCSVのままとなっておりました。
(↑ファイル名とシート名が同期を取っているので)

このCSVを確実にエクセル形式へと変換したいのですが、
どなた様かいいお考えをお持ちでしたら教えてください。
ググってみたところ、そういったアドインがあるのですが、
できれば費用をかけずに行いたいです…。

A 回答 (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

'---------------------------------------------------
    • good
    • 2

#5のWendy02です。



コードに間違いがありましたので、訂正を出しておきます。

真中辺りに、以下のようなコードがあります。
 On Error GoTo NextStatus
× With Workbooks.Open(fn) '間違い


On Error GoTo NextStatus
 With Workbooks.Open(fn, Format:=2) '正解

でした。
    • good
    • 1

>リネームソフトを使って、(.csv)⇒(.xls)の一括変換を


したところ、拡張子は確かに.xlsに変換されたのですが、
中身はCSVのままとなっておりました。
これにはコンピュターのファイルの拡張子やファイル形式の知識の
欠如を露呈しています。勉強してください。
>をExcel(.xls)ファイルに変換
エクセルのメニューのファイルの開くで読み込ませ、名前をつけて保存すればよい。
エクセルをもっていないという前提ですか。ならば質問に書くべきです
オープンオフィスでも入手するとか。
エクセルを通さずに
CSV-->ソフト--->エクセル形式ファイル
の(エクセルかワークス?以外の)ソフトは素人では作れません。
>確実に
この意味はわかりません。不必要な文章部分では。
>大量の
エクセルの行数制限以上のものは変換は難しい。
    • good
    • 1

エクセル本体でマクロを使って出来ます。



「新しいマクロの記録」で、やりたい事を手作業しながらマクロに記録し、記録したマクロを手直しすれば良いのです。

例えば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
    • good
    • 0

エクセルはお持ちではないのですか


エクセルで読み込めるはず
また フリーのオープンオフィスでも
可能
    • good
    • 2

>CSVを確実にエクセル形式へと変換したいのですが、



CSVというのは、テキストファイルです。
拡張子だけを変更してもエクセルファイルにはなりません。
基本的には、CSVファイルをエクセルで読み込んでエクセル型式で保存する事になります。

一括(連続)処理するなら、VBAで処理する事になります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!