• ベストアンサー

エクセルと同じファイル名で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としては使えるのですが、気持ちがすっきりしません。 どなたか正解をお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

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はディスクに保存されていることが前提です。

noname#252806
質問者

お礼

「Application.Substitute」とは初見です。 これで「.xls」を置き換えるのですね。 これですっきりしました。 すばやい解答ありがとうございました。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

InStr(ActiveWorkbook.Name, ".") - 1とは、Nameの中から「.」までの文字数を取得し、それから1を引いています。 Left(ActiveWorkbook.Name, で、Nameの左側からその数だけ文字をぬき出しています。

noname#252806
質問者

お礼

なるほどInStrとはSERCH関数のことですか。 (同じ機能なのに名前が違ったり、 Substituteは頭 に「Apprication.」が付いたり。 同一にして欲しいと思うのは私だけでしょうか) VBAのサンプルでは関数を見たこと無かったので ほとんど気にしていませんでしたがお蔭様で VBAでの使い方がわかりました。 お二人ともありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

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 でもできますね。

noname#252806
質問者

お礼

「InStr(ActiveWorkbook.Name, ".") - 1」とは Nameの中から拡張子の手前の「.」より左側の文字列を 使うという意味でしょうか。 私はNameの最後の4桁(拡張子部分)を消そうと思いましたが 桁数が変動するので無理と思いました。 いろいろやり方があるのですね。 これまた解答ありがとうございました。

関連するQ&A