[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数のCSVをxlsxに変換したい』(ゆーな)
初めまして、
200〜1000近いcsvファイルをxlsxファイルに変換したいのですが、
ひとつひとつ手作業をするには多すぎる量の為、マクロを組めないかと思いご相談いたします。
同フォルダに入っているcsvファイルを
指定フォルダ(又は同フォルダ)にxlsxとして保存
上記の作業を行いたいです。
こちらの掲示板でそれらしきものを拝見したのですが、
400のエラーが出てしまいました。
マクロ初心者で申し訳ありませんが、何卒ご協力お願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
>こちらの掲示板でそれらしきものを拝見したのですが、 >400のエラーが出てしまいました。
コードおよび、参考にしたページのリンクを貼ってみてください。 (カリーニン) 2015/10/02(金) 14:25
>>400のエラーが出てしまいました。
せっかく、がんばって書かれたコードですから、それをアップして、皆さんに添削してもらうほうがよくないですか? もったいないですよ。
(β) 2015/10/02(金) 14:26
コマンドで結合してから開いて名前を付けて保存とかも検討してみてはどうですか?
copy /b c:\temp\*.csv c:\temp\test\all.csv
(ウッシ) 2015/10/02(金) 14:35
終わりの方にあるxlsをxlsxに変更しているくらいしか触れていません。
よろしくお願いいたします。
Sub CSV変換()
Dim myObjA As Object Dim myDirA As String Dim myFileNameA As String Dim myFileListA As String Dim myFileCountA As Long Dim wb As Workbook
Dim myObjB As Object Dim myDirB As String
'変換元フォルダ選択ダイアログの表示 Set myObjA = CreateObject("Shell.Application"). _ BrowseForFolder(0, "変換元のフォルダを選択して 「OK」 をクリックしてください", 0) If myObjA Is Nothing Then Exit Sub
myDirA = myObjA.Items.Item.Path If Right(myDirA, 1) <> "\" Then myDirA = myDirA & "\"
'フォルダ内のCSVファイルを確認 myFileNameA = Dir(myDirA & "*.csv")
Do While myFileNameA <> "" If myFileNameA <> ThisWorkbook.Name Then myFileListA = myFileListA & Chr(13) & myFileNameA myFileCountA = myFileCountA + 1 End If
myFileNameA = Dir() Loop
If myFileCountA = 0 Then MsgBox "ファイルは見つかりませんでした。変換を終了します。", 48 Exit Sub ElseIf vbNo = MsgBox(myFileCountA & " 個の .csv ファイルが見つかりました。変換を実行しますか?" _ & Chr(13) & myFileListA, 4, "ファイル確認") Then MsgBox "キャンセルしました。" Exit Sub End If
'保存先フォルダ選択ダイアログの表示 Set myObjB = CreateObject("Shell.Application"). _ BrowseForFolder(0, "変換後の保存先フォルダを選択して 「OK」 をクリックしてください", 0) If myObjB Is Nothing Then Exit Sub
myDirB = myObjB.Items.Item.Path If Right(myDirB, 1) <> "\" Then myDirB = myDirB & "\"
'Excel処理 myFileNameA = Dir(myDirA & "*.csv")
Do While myFileNameA <> "" Application.DisplayAlerts = False Application.ScreenUpdating = False
If myFileNameA <> ThisWorkbook.Name Then Set wb = Workbooks.Open(myDirA & myFileNameA) wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xlsx", _ FileFormat:=xlExcel3 wb.Close End If
myFileNameA = Dir() Loop
Application.DisplayAlerts = True Application.ScreenUpdating = True
MsgBox "完了しました。"
End Sub (ゆーな) 2015/10/02(金) 14:41
一つずつxlsxに変換するんですね。
(ウッシ) 2015/10/02(金) 14:45
ファイル名などはそのままに、
csv→xlsx
を行えたらと思っています。
一つのbookやシートにはまとめず。
個々のものとして作業を行いたいです。
(ゆーな) 2015/10/02(金) 15:01
wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xlsx", _
FileFormat:=xlOpenXMLWorkbook
とすると、どうですか?
(ウッシ) 2015/10/02(金) 15:02
かぶりましたがそのままアップします。
↓がおかしいと思われます。
>FileFormat:=xlExcel3
↓に変えてみてください。
xlOpenXMLWorkbook
参考HPです。
https://msdn.microsoft.com/ja-jp/library/office/ff198017.aspx
http://excwlvba.blogspot.jp/2013/04/xlfileformat.html
(カリーニン) 2015/10/02(金) 15:06
コード自体は下記の一番最後のもののようだ。
[[20091119112315]] 『同一フォルダー内にあるcsvファイルを別ファイルにxls形式で一括保存』(shinv230)
(ねむねむ) 2015/10/02(金) 15:09
150個以上位になると動作は止まってしまうようですが、
分割作業を行えば作業ができました!
ありがとうございます!
ねむねむ様>
ありがとうございます。
確かにこちらを参考にさせていただいていました!
(ゆーな) 2015/10/02(金) 16:22
ちょっと気になったので・・・。
せっかく 見つけた問題なのにこのままでよいのでしょうか? dir関数で2度ぐるぐる回す必要があるのか? なんて疑問もありますが、 Workbookオブジェクト(コレクション)の持つ機能だけで簡単にCSVからXLSX変換を してくれるわかりやすいコードです。
>150個以上位になると動作は止まってしまうようです これが事実なら、1000個のCSVファイルに対しては、当たり前ですが、15%の処理能力しかないことになります。
プログラムでは、少量のデータなら、うまくいくことも大量のそれでは うまくいかない事は、よくあることです。
大量データだと プログラムが止まってしまったり、極端に処理速度が下がってしまう、 これらの克服のために頭のよい人がエラーにならない方法や処理速度の速いロジック等を公表し、 それを我々は使わせてもらっています。 とりわけExcel/VBAには、少量のデータ量だとうまく作動するロジックもその数が多くなると うまく行かないケースが多い印象があります(現象に遭遇したことが何回かあります)。
Excel2000の時代には、今回の事例と同様 ブックのOpenとCloseを繰り返していると、エラーに成るケースや とびとびのセルが大量にあるときのSpecialcellsメソッドの不具合などなど・・・。 今の2013や2010では 修正されているものもありますが・・・・。
これらの回避方法や大量データによる不具合の限界値などを探ることで今後に生かすことは、必要です。
この「動作は止まってしまう」現象の詳細(エラーなるのか? エラーにはならないが結果的に作成されない)説明をしてください。
先ほども少し触れましたが、Excel2000時には、「ブックのOpenとCloseを繰り返していると、メモリ不足でエラーになるケース」は、私も経験したことがあります。
これは、ファイル情報(FCB?)がメモリ上に確保されるのですが、これが クローズで解放されるはずが そうはならないでプログラム終了後にガベージコレクションが行われていることが主な原因だったと思います。
この時は、ループ内にDeventsを入れて、一回一回メモリ処理を行わせることで回避できました。 が、これは Excel2002では、直っていました。
同じ原因の現象がまだ直りきっていないのか? 新たな問題か調べる必要はあると思いますよ!!
(ichinose) 2015/10/03(土) 08:48
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.