質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.92%

VBA フォルダの中のxlsxファイルをcsvで保存する方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,079

score 11

フォルダの中に複数のxlsxファイルがあり、全てをそれぞれのブック名でcsvで保存する方法について悩んでいます。

フォルダの中のファイルをすべて処理するコードについては、あるサイトで掲載されていたコードを利用しています。

以下のとおりに書きましたが、「Save Asメソッドは失敗しました。'Workbook'オブジェクト」というエラーが出てしまいます。
また、できれば、UTF-8に変えて保存したいと思っています。

書いたコードは以下のとおりです。
Subの部分 は省略しています。

Dim FileName As String
Dim path, fso, file, files
path = "(パス名)"
Set fso = CreateObject ( Scripting. FileSystemObject')
Set files = fso. GetFolder (path). files
For Each file in files
Dim wb As Workbook
Set wb = Workbooks. Open (file)

ブックに対する処理

Dim book1 As Workbook
Set book1 = ActiveWorkbook
Dim X As String
X = Left (book1. Name, Len (book1. Name) - 5) &"CSV"
book1. SaveAs Filename:=X, _
FileFormat :="XICSV"
Next file


「FileFormat :="XICSV"」部分をカットすると、1つずつcsvは作成されますが、開いてみると文字化けしてしまっています。

ご回答いただけると助かります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

FileForamtに指定するのは文字列ではなく、XlFileFormat 列挙体です。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.xlfileformat
省略時は「既定値は、使用されている Excel のバージョンの形式です。」なので、いわゆるExcelフォーマットになっているはずです。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook.saveas
つまりファイル名だけはCSVになってますが、中身はExcelのまま保存されているのではと思います。
(試しに拡張子をelsxに変えてみると正しく開けるはずです)
よって正しくCSVファイルとして保存、尚且つUTF8で保存するのであれば、FileFormatの行を次のようにしてください。

FileFormat :=xlCSVUTF8


※UTF8に保存するのはやったことがないので問題あればコメントください。こちらでも試してみます。

追記
不要な処理や、無駄な空白、生成するファイル名の間違い、オブジェクトの後始末など足りていなかったのでコードを整理しました。
こちらでどうでしょうか。
ちなみにxlCSVUTF8はExcel2016からだそうで、私の環境では試せませんでした。

Dim FileName As String
Dim path, fso, file, files
Dim wb As Workbook
Dim book1 As Workbook
Dim X As String

path = "(パス名)"

Set fso = CreateObject("Scripting.FileSystemObject")
Set files = fso.GetFolder(path).files

For Each file In files
    Set wb = Workbooks.Open(file)
    X = Left(wb.Name, Len(wb.Name) - 5) & ".CSV"
    wb.SaveAs FileName:=X, FileFormat:=xlCSVUTF8
    wb.Close
    Set wb = Nothing
Next file
Set fso = Nothing

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/10 15:16

    こちらはExcel2013のため、試し実行はxlCSVで行いました。
    もしバージョンがわからないようであれば、一度xlCSVでお試しください。

    キャンセル

  • 2019/10/10 22:23

    ご返信遅くなり申し訳ありません。
    excel2016ですが、バージョンが古い?のが問題なのだと思っています。
    xlCSVではうまくいきました。本当にありがとうございました。
    助かりました。

    キャンセル

  • 2019/10/10 23:26

    2016ならxlCSVUTF8で動きそうですけどね。
    xlCSVだとUTF8では出力されてないはずなのでお忘れなく。

    キャンセル

+1

>開いてみると文字化けしてしまっています。

手動でやってみても、文字化けしますか?
出来たテキストファイルを開くときはどんなアプリ使ってますか?

https://did2memo.net/2016/11/14/excel-csv-utf8/
http://acoustic-groove.hatenablog.com/entry/2017/11/11/003157
https://tonari-it.com/excel-vba-utf8-write/


手動で出来てるなら、

Sub Macro1()
    Dim wb As Workbook
    Dim sFileName As String

    Set wb = ActiveWorkbook
    sFileName = Replace(wb.Name, "xlsx", "csv")

    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=wb.Path & "\" & sFileName, _
                          FileFormat:=xlCSVUTF8, CreateBackup:=False
    Application.DisplayAlerts = False
End Sub

こんな感じでいいんではないかなぁ。。。
こちらは2010なので保存できませんが^^;;

参考HP>>
Excel 2016でUTF-8のCSVファイルがサポートされるようになりました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/10 12:31

    手動でcsvで保存しても文字化けはしません。
    terapadというアプリを使用しています。

    キャンセル

  • 2019/10/10 12:36

    >手動でcsvで保存しても文字化けはしません。
    ならば、その操作をマクロの記録してみたら、いかがでしょう?

    キャンセル

  • 2019/10/10 12:41

    URLをはっていただきありがとうございます。こちらで試してみます。


    マクロの記録を使うと、
    それぞれのブック名で保存するという操作ができません。(同じ名前で保存しようとするためエラーが出ます)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る