アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。VBA 初心者です。

あるセルに日付を入力しています。
そのセルは書式設定の表示形式・日付で「2001/3/14」と入力した時に、「2001年3月14日」と表示される様に設定しています。

そしてこのファイルをマクロで名前をつけて保存するとき、上記のセル(の値)をファイル名したいのですが、2001\3\14と認識され、エラーが出ます。

セルに日付を入力する時に、出来るだけかな入力はせず、日付をファイル名にして保存するにはどういう方法があるでしょうか。

わかりにくい説明で申し訳ありません。ウィンドウズXP・エクセル2003です。よろしくお願いします。

A 回答 (4件)

Sub mySave()


Dim ws As Worksheet
Set ws = Sheets("sheet1")
ThisWorkbook.SaveAs Format(ws.Range("A1"), "yyyy\年mm\月dd\日") & ".xls"
End Sub
Sheet1のA1の日付で保存する場合です。
2001年03月14日.xls となります。
    • good
    • 3
この回答へのお礼

おかげさまで、思いとおりに保存することができました。
早速のご回答、ありがとうございました。

お礼日時:2007/04/14 19:37

こんにちは。



>そのセルは書式設定の表示形式・日付で「2001/3/14」と入力した時に、「2001年3月14日」と表示される様に設定しています。

それは、VBAの基本的なことだと思いますが、セルの書式が、「2001年3月14日」のように、yyyy年mm月dd日となって、間違いないのなら、Rangeオブジェクトの、Valueプロパティ(プロパティを付けない場合も含め)ではなくて、Text プロパティです。

それが不確実なら、以下の二番目のように、Format 関数でのテキスト変換が必要になるとのですね。

Sub TestSave()
 Application.Dialogs(xlDialogSaveAs).Show _
  (ThisWorkbook.Worksheets("Sheet1").Range("A1").Text)
End Sub


不確実な場合
Sub TestSave2()
 Dim Fn As Variant
 Fn = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value
 If IsDate(Fn) Then
  Fn = Format$(Fn, "yyyy年MM月dd日")
  Application.Dialogs(xlDialogSaveAs).Show (Fn)
 Else
  MsgBox "日付値ではありません。", 64
 End If
End Sub

なお、ダイアログの場合、拡張子は、キメウチしなくてもよいと思います。そのままなら、xlsですし、また、拡張子も変えられます。
    • good
    • 0
この回答へのお礼

ご丁寧に説明いただき、ありがとうございます。
おかげさまで思い通りに保存することができました。

お礼日時:2007/04/15 19:03

セル D7 に 「2001/3/14」と入力した時の処理です。



Sheets("Sheet2").Select
Sheets("Sheet2").Name = Format(Range("D7"), "yyyy""年""m""月""d""日"";@")
    • good
    • 2
この回答へのお礼

教えていただいたコードですと、シート名が変わってしまいました。
でも、これをヒントに Sheets("Sheet2").Name を変数にすると無事保存することができました。
早速のご回答、ありがとうございました。

お礼日時:2007/04/14 19:36

>「2001/3/14」と入力した時に、「2001年3月14日」


>2001\3\14と認識され、エラーが出ます。

ファイル名には"/"等が使えないのでエラーになるのだと思います。
保存時には、日付を読み込んで
Format(Range("A1"),"yyyymmdd") 等として、日付設定を変更した方がよいでしょう。
    • good
    • 1
この回答へのお礼

おかげさまで思いとおりに保存することができました。
早速のご回答、ありがとうございました。

お礼日時:2007/04/14 19:34

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A