こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのシートのデータをVBAを使ってCVS形式で保存したいのですが、文字化けしないようにするにはどうしたらいいでしょうか?

エクセルのシートのデータをVBAを使ってCVS形式で保存したいのですが、文字化けしてしまいます。手動で「名前を付けて保存」すると文字化けしません。文字化けしないようにするにはどうしたらいいでしょうか?
どなたかお教えいただきたく、よろしくお願いします。

----------------------------------------------------------------------
Sub test5()

Dim aaa As String
Dim fname As Variant


aaa = Format(Now, "YYMMDD")
fname = Application.GetSaveAsFilename(InitialFileName:=aaa & ".csv", fileFilter:="csvファイル(*.csv), *.csv")

If fname = False Then Exit Sub
'保存
Worksheets("sheet1").SaveAs fname

End Sub

投稿日時 - 2008-06-05 20:56:41

QNo.4078036

困ってます

質問者が選んだベストアンサー

こ、これはですね・・・
見た方が早そうなので手順を追って下さい

複数シートがあるファイルでご自身のコードを実行してください

このマクロ実行直後に、手動で名前を付けて保存を表示してみてください
この画面のファイル名の所はどうなっていますか?
その下のファイルの種類はどうなっていますか?

イメージとしては、エクセルファイルの拡張子を単に「.csv」と変更したのと同じ状態になっています
文字化けしたファイルをメモ帳で見ると、ちょうどエクセルファイルをメモ帳で開いたときと状況が似ていると思います

理屈というか、なんでこうなるのかと言うと
まず GetSaveAsFilename は、ご存知の通りダイアログを出す"だけ"で、保存されません
で、SaveAs の
引数の FileFormat

>FileFormat 省略可能です。バリアント型 (Variant) の値を使用します。ファイルを保存するときのファイル形式を指定します。指定できる形式については、FileFormat プロパティを参照してください。既存のファイルでは、指定された最後のファイル形式が既定のファイル形式です。新しいファイルでは、現在使用されている Excel のバージョンでのファイル形式が既定のファイル形式です。

つまり、今のファイル形式が指定されています
作業中のファイルは"まだ保存されていない"ので、『エクセル形式で保存』が、上で言うところの規定のファイル形式です
これに、"080606.csv"がファイル名と設定されて保存する事になるので、実験で出た状態
『080606.csv というファイル名のエクセルファイル』が出来上がります

試しに文字化けしたファイルをエクセルで開いて見てください
今度は逆に、普通に開けると思います
しかもこのファイルは、シートも保持しています
CSVファイルではありえないですよね?

つまり
>Worksheets("sheet1").SaveAs fname

Worksheets("Sheet1").SaveAs fname, xlCSV
となります

因みに
Application.Dialogs(xlDialogSaveAs).Show Format(Now, "YYMMDD") & ".csv", xlCSV
だけで、目的の動作が可能です

今回は示されたコードを何回か試したので、妙な事は言ってないと思います^^;

投稿日時 - 2008-06-06 03:27:56

お礼

pulsaさん

今回もご回答いただき、ありがとうございます。
引数の指定が足りなかったということですね。
application.GetSaveAsFilenameのapplication.をsheetにできればいいのかと思ってました(できなかったですけど。。。)

>Application.Dialogs(xlDialogSaveAs).Show Format(Now, "YYMMDD") & ".csv", xlCSV
↑↑
saveasのダイアログをcsvフォーマットで表示するということですね。
()が規定の名前になるということですね。

今回もまことにありがとうございました。

投稿日時 - 2008-06-06 08:07:30

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

'保存
>Worksheets("sheet1").SaveAs fname

引数、FileFormatをセットしてくだされ。

Worksheets("Sheet1").SaveAs fname, FileFormat:=xlCSV
 
以上。
 

投稿日時 - 2008-06-05 23:06:31

お礼

onlyromさん
ありがとうございます。
うまくいきました。
format形式を指定するのですね。
どうもありがとうございました。

投稿日時 - 2008-06-06 07:47:35

あなたにオススメの質問