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

解決済みの質問

エクセルでマクロを使ってCSV保存時のファイル名

初めてエクセルでマクロ(マクロの記録と言うのを使って)をトライしている初心者です。自分なりに色々調べて見ましたが、イマイチ分からないので以下2つ教えて頂けないでしょうか?

他のアプリに取込む為、通常使っているエクセルのデータをCSV形式で保存するまでをマクロで作成しマクロボタンまでを作ることは出来ました。それを使いたいと言う同僚が何人かいて、その人にエクセルを渡す場合についてです。

(1)CSV保存するファイル名を、各人好みの元々のエクセルのファイル名にしたい。
(2)保存する場所を、同僚各自のデスクトップにしたい。または各自に指定して保存させたい。

のですが、私が記録したマクロの保存該当部分は以下と思いますが、自分用なので、自分のPCの名前(以下、XXXX部分)になっていて、かつ自分が指定した毎回同じファイル名(以下、AAAA部分)になっているのが問題で、同僚のPCではマクロが実行できませんでした。

この、XXXXとAAAAやその前後の言葉をマクロの修正(VBAで)で書き換えればいいのでしょうか?その場合どのようにすればいいか教えてください。

ChDir "C:\Users\XXXX\Desktop"
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\XXXX\Desktop\AAAA.csv", FileFormat:=xlCSV, _
CreateBackup:=False
End Sub

長くなりましたが、どうぞ宜しくお願い致します。

投稿日時 - 2017-07-22 10:40:16

QNo.9354572

困ってます

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

回答No.2です。

今、

Sub Sample()
Set ws = CreateObject("WScript.Shell")
dt = ws.SpecialFolders("Desktop") & "\"
ActiveWorkbook.SaveAs Filename:=dt & ThisWorkbook.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False
End Sub

で、もう一度、試しましたが(「Sub Sample()」と「End Sub」を追加しただけで、それ以外は、全くいらっていません)、エラーなど出ませんでした。

ただ、私、勘違いをしていました。

「ThisWorkbook.Name」ですと、「.xlsm」が付いてしまいました(「~.xlsm.csv」となってしまいました)。

そこで、以下のようにしていただければ、「~.csv」となります。

Sub Sample()
Set so = CreateObject("Scripting.FileSystemObject")
Set ws = CreateObject("WScript.Shell")
dt = ws.SpecialFolders("Desktop") & "\"
fn = so.GetBaseName(ThisWorkbook.Name)
ActiveWorkbook.SaveAs Filename:=dt & fn & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
End Sub

申し訳、ございませんでした。

投稿日時 - 2017-07-23 12:08:39

お礼

Prome_Lin様、
申し訳ございません。なんてそんな・・・こんなに丁寧にアドバイスして頂き、こちらこそ本当にすみません&ありがとうございました。
教えて頂いたものをそのままコピペして、実行しましたら、私の理想通りのものが出来ました。本当に本当にどうもありがとうございます。

投稿日時 - 2017-07-23 14:19:24

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

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

回答(3)

ANo.2

それぞれのパソコンの「デスクトップ」は

Set ws = CreateObject("WScript.Shell")
dt = ws.SpecialFolders("Desktop") & "\"

で、「dt」に入ります。

したがって、「ChDir "C:\Users\XXXX\Desktop"」は不要で、

Set ws = CreateObject("WScript.Shell")
dt = ws.SpecialFolders("Desktop") & "\"
ActiveWorkbook.SaveAs Filename:=dt & "AAAA.csv", FileFormat:=xlCSV, CreateBackup:=False

で、デスクトップに、「AAAA.csv」という名前で保存されます。

次に、マクロが走っている、エクセルのファイル名は、

「ThisWorkbook.Name」または、「ActiveWorkbook.Name」で取得できます。

このとき、拡張子がつきませんので(たとえば、「abc.xlsx」なら「abc」)、そのまま

Set ws = CreateObject("WScript.Shell")
dt = ws.SpecialFolders("Desktop") & "\"
ActiveWorkbook.SaveAs Filename:=dt & ThisWorkbook.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False

で、エクセルと同じファイル名の「csv」ファイルとして保存されます。

投稿日時 - 2017-07-22 12:54:35

補足

教えて頂いたものをそのままコピペして、試して見たのですが、「構文エラー」となり、以下の部分が赤文字になってしまいました。昨日買ってきた本を見てもさっぱり解決できず、大変恐縮なのですが、再度教えて頂けないでしょうか?どうぞ宜しくお願い致します。

ActiveWorkbook.SaveAs Filename:=dt & ThisWorkbook.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False

投稿日時 - 2017-07-23 11:48:11

ANo.1

最後の方のマクロは編集モードで開けたんですね?(vba)
その通りです。
xxx aaa を単に書き換えてvbaを閉じれば保存されます。

投稿日時 - 2017-07-22 10:53:05

補足

早々にどうもありがとうございました。

そして、私の質問の仕方がちょっと言葉足らずです、すみません。

人にそのマクロファイルを渡しても、いちいち私や受取った人がXXXやAAAを書き換えないでも済む用にしたいのです。私が最初にマクロの編集モードでXXXやAAA含むその他の部分もVBAを書き換えてしまえば、使う人やPCが変わってもマクロを編集しなくても済むかなと考えております。

重ねての質問ですみません。どうぞ宜しくお願い致します。

投稿日時 - 2017-07-22 12:59:52

あなたにオススメの質問