重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (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はディスクに保存されていることが前提です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/26 23:52

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


Left(ActiveWorkbook.Name, で、Nameの左側からその数だけ文字をぬき出しています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/27 20:29

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

でもできますね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/27 00:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!