- ベストアンサー
エクセルと同じファイル名でcsvを作成するマクロ
エクセルからCSVファイルをYYMMDD付でマクロを使って 作ろうとしていますが拡張子の「.xls」がどうしても残ってしまいます。 例えば、「test.xls」が「test.xls070326.csv」のように。 これを「test070326.csv」とするにはどうしたらよいでしょう。 今のコードはつぎのようにしています。 Sub test1() Dim flname As Variant Dim wb As Workbook flname = ActiveWorkbook.Name + CStr(Format(Date, "yymmdd")) ActiveSheet.Copy ActiveSheet.SaveAs Filename:=flname, _ FileFormat:=xlCSV ActiveWindow.Close savechanges:=False ActiveWorkbook.Close End Sub これでもCSVとしては使えるのですが、気持ちがすっきりしません。 どなたか正解をお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Sub test1() Dim flname As String flname = Application.Substitute(ActiveWorkbook.Name, ".xls", "") _ & CStr(Format(Date, "yymmdd")) ActiveSheet.Copy ActiveSheet.SaveAs Filename:=flname, FileFormat:=xlCSV ActiveWindow.Close savechanges:=False End Sub ではいかがでしょうか? ただしパスを指定していませんので元のBookはディスクに保存されていることが前提です。
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
InStr(ActiveWorkbook.Name, ".") - 1とは、Nameの中から「.」までの文字数を取得し、それから1を引いています。 Left(ActiveWorkbook.Name, で、Nameの左側からその数だけ文字をぬき出しています。
お礼
なるほどInStrとはSERCH関数のことですか。 (同じ機能なのに名前が違ったり、 Substituteは頭 に「Apprication.」が付いたり。 同一にして欲しいと思うのは私だけでしょうか) VBAのサンプルでは関数を見たこと無かったので ほとんど気にしていませんでしたがお蔭様で VBAでの使い方がわかりました。 お二人ともありがとうございました。
- merlionXX
- ベストアンサー率48% (1930/4007)
Sub test1() Dim flname As Variant Dim wb As Workbook flname = Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) & Format(Date, "yymmdd") & ".csv" ActiveSheet.Copy ActiveSheet.SaveAs Filename:=flname ActiveWindow.Close savechanges:=False ActiveWorkbook.Close End Sub でもできますね。
お礼
「InStr(ActiveWorkbook.Name, ".") - 1」とは Nameの中から拡張子の手前の「.」より左側の文字列を 使うという意味でしょうか。 私はNameの最後の4桁(拡張子部分)を消そうと思いましたが 桁数が変動するので無理と思いました。 いろいろやり方があるのですね。 これまた解答ありがとうございました。
お礼
「Application.Substitute」とは初見です。 これで「.xls」を置き換えるのですね。 これですっきりしました。 すばやい解答ありがとうございました。