プロが教える店舗&オフィスのセキュリティ対策術

複数のcsvファイルをExcelに一括変換したいです。
こちらのサイトを参考にしてVBAを実行しましたが上手く変換できたファイルと上手く行かないファイルがあります。
https://moripro.net/vba-convert-csv-to-excel/

上手く行かないファイルの名前は以下のように拡張子csvの前に「.dd」などが入っています。
aaa_bbbbb.ccc.dd.csv
ファイル名がまずいのはわかりますが、当面仕様上変更できません。
この状態で
aaa_bbbbb.ccc.dd.csv 

aaa_bbbbb.ccc.dd..xls
に一括変換したいのですが、以下のコードのどこを変更したらよろしいでしょうか?

Sub main()

Application.ScreenUpdating = False

Dim OpenFileName As Variant
OpenFileName = Application.GetOpenFilename _
("CSVファイル,*.csv*", MultiSelect:=True)

If Not IsArray(OpenFileName) Then
MsgBox "キャンセルしました。": Exit Sub
End If

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim n As Long '選択したファイル数、処理を繰り返す
For n = LBound(OpenFileName) To UBound(OpenFileName)

Dim wb As Workbook
Set wb = Workbooks.Open(OpenFileName(n))

Dim strBaseName As String
strBaseName = fso.GetBaseName(wb.Name) '拡張子を除くファイル名を取得

'同じファイル名で同じ階層にExcel形式で保存する
wb.SaveAs _
Filename:=wb.Path & "\" & strBaseName, FileFormat:=xlWorkbookDefault

wb.Close SaveChanges:=False

Set wb = Nothing 'いったん解放

Next n

Application.ScreenUpdating = True

MsgBox "終了しました。"

End Sub

質問者からの補足コメント

  • うーん・・・

    どう上手く行かないのか、を書き忘れたので補足します。
    aaa_bbbbb.ccc.dd.csv

    aaa_bbbbb.ccc.dd
    に変換されます。
    つまり、末尾の「.dd」が拡張子として認識され、ファイルの種類はDDファイルになってしまいます。

      補足日時:2023/03/03 13:25

A 回答 (2件)

こんにちは



「うまくいかない」としか記されていないので、実際がどうなっているのか不明ですけれど・・

推測するところ、「aaa_bbbbb.ccc.dd」というファイルが作成できているのではないでしょうか?
(無理矢理開けば、エクセルファイルとして開けると思いますが・・)

通常は、拡張子のないファイル名を指定して保存すれば、エクセルが拡張子を付加してくれますが、ご提示の場合はファイル名に既に拡張子らしきもの(この場合は .dd )が含まれているので、そのまま保存してしまうものと推測します。

もしも、起こっている現象がそのようなものであるなら、保存時に拡張子を明示して保存すれば宜しいでしょう。
wb.SaveAs _
Filename:=wb.Path & "\" & strBaseName & ".xlsx", FileFormat:=xlWorkbookDefault


※ 実態が不明なため推測で回答していますが、起きている現象がこれとは異なる場合は、原因は別なので、上記では解決できないと思われます。
    • good
    • 2
この回答へのお礼

説明が足らず失礼しました。はい、ご推測の通りです。Excelの拡張子も本当に使いたいのは.xlsではなく、.xlsxでした。おかげさまで上手く行きました。ありがとうございました。

お礼日時:2023/03/03 14:05

こんにちは


どううまくいかないのか分かりませんが、文字コードの問題でないとして

xlsですか・・・
ファイル名の問題では無く拡張子.xlsへのFileFormatの問題かと思います

wb.SaveAs _
Filename:=wb.Path & "\" & strBaseName & "..xls", FileFormat:=xlExcel8
これでどうでしょう?
    • good
    • 1
この回答へのお礼

説明が足らず失礼しました。おかげさまで上手く行きました。ありがとうございました。

お礼日時:2023/03/03 14:02

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

このQ&Aを見た人はこんなQ&Aも見ています