人に聞けない痔の悩み、これでスッキリ >>

タイトル通りなのですが
ファイル名を自動で日付にして保存するマクロ
どうやればよいのでしょうか

私は記録したマクロを解説書を見ながら整理
するくらいのレベルです

よろしくお願いします

このQ&Aに関連する最新のQ&A

A 回答 (4件)

マクロではなく、VBAになりますが、


例えば、2005年5月1日だったら、「20050501.xls」という、ファイル名にして保存することでよろしければ、次のようにすれば出来ます。

Sub 日付のファイル名()
Dim a, b, c As String

a = Application.WorksheetFunction.Text(Date, "yyyymmdd")
b = "C:$"
c = b & a & ".xls"
ThisWorkbook.SaveAs (b)
End Sub

b は、実際に保存しようとする、フォルダー名を入れて下さい。
もし、2005年5月1日を「050501.xls」と、する場合は、 (Date, "yyyymmdd")を (Date, "yymmdd") とすれば、出来ます。
    • good
    • 0
この回答へのお礼

ありがとうございます
"yymmdd"の部分の書式を変えると
H17.5.1にもなると解りました
助かりました。

お礼日時:2005/05/01 22:53

私は、サブルーチンも置かずに、一本で書いてしまったので、本当に汚いコードで自信がないけれど、1つの例として出しておきますね。

これは、できれば、Personal.xls の標準モジュールで、ツールボタン登録がよいのではないかなって思いました。

Sub SaveWithTimeStamp()
Dim fName As String
Dim dFilePath As String
Dim myPath As String
Dim ans As Integer, rtn As String
dFilePath = Application.DefaultFilePath & "\"
fName = Format$(Date, "yymmdd")
myPath = dFilePath & fName & ".xls"
If Dir(myPath) = "" Then
 ActiveWorkbook.SaveAs fName
 Else
 ans = MsgBox(fName & " と同名のファイルがすでにあります." & Chr(13) & _
 "上書きしますか?", vbYesNoCancel)
 If ans = vbYes Then
  Application.DisplayAlerts = False
  ActiveWorkbook.SaveAs myPath
  Application.DisplayAlerts = True
 ElseIf ans = vbNo Then
  fName = Application.InputBox("名前を変更してください." & Chr(13) _
  & fName & ".xls", , fName, , , , , 2)
  If rtn <> "False" Then
  If InStr(fName, ".xls") = 0 Then fName = fName & ".xls"
  myPath = dFilePath & fName
  If Dir(myPath) = "" Then
   ActiveWorkbook.SaveAs myPath
   Else
   MsgBox fName & "が、同じフォルダにありますので、1度フォルダを調べてください.", 64
   Exit Sub
  End If
  Else
  Exit Sub
  End If
  Else
  Exit Sub
 End If
End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます すごいですね!
プリントして、よく勉強したいと思います。

お礼日時:2005/05/01 22:57

マクロの記録を利用されるなら、ひとまず適当な名前で「名前を付けて保存」したコードのファイル名の部分(XYZ.xlsの部分)を以下のように置換編集してください。



"・・・\・・・\XYZ.xls", を
"・・・\・・・\" & Format(Date, "yymmdd"),  にします
    • good
    • 1
この回答へのお礼

ありがとうございます

お礼日時:2005/05/01 22:54

マクロで


ActiveWorkbook.SaveAs Filename:="C:\My Documents\a.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False

"C:\My Documents\a.xls”のところに所要のパスとファイル名を入れれば
okです。
通常の操作で出きることであれば、マクロ記録の機能を使うと、
わざわざ解りにくい解説書を読まなくてもマクロはつくれますよ。
逆に、マクロ記録で作っておいて後で解説書を見ながら蛇足な部分を削除する。
という方法を私は実行していますが...(参考までに)
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2005/05/01 15:15

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイル名を今日の日付、時刻で保存する

マクロについて教えてください
エクセル(2003?)でマクロを使って
ファイルを保存するボタンをつくろうと思います。
「ファイル名を今の月-日-時-分で保存する」
という内容を書きたいと思います。

保存するところまではできるのですが、
今日の月-日-時-分を自動的にファイル名に入れる
ところをどうしたらよいかわかりません。

Filename = Format(Date, "yyyy-mm-dd")
と入れれば日付が入るのはわかったのですが、
時刻も入れたいです

Filename = Format(Date,"yyyy-mm-dd",Time,"hh-mm-ss")
こんな風に書いてみたのですが、うまく機能しませんでした

ご存知の方、ご教授ください。

Aベストアンサー

Filename = Format(Now(), "yyyy-mm-dd-hh-mm-ss")
でOK。

Q日付を入力したセルをファイル名にして保存するには

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

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

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

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

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

Aベストアンサー

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 となります。

QExcelでセル内の文字をファイル名にする方法と、下のSheet1タブを2列にする方法は?

Excel2003です。OSはWinXPです。質問は2つです。

1.セル内の文字をファイル名にする方法は?
例えばA1セルに 1153 と入っていたら、ファイルの名前を付けて保存するとき、普通は Book1.xls となりますが、
これを 1153.xls とするにはどうしたらよいですか?

2.下のSheet1タブを2列にする方法は?
EXcelの下の方にシート切り替えがありますが、これを2列にするにはどうしたらよいですか?

Aベストアンサー

1は、前回の回答で間違いありませんが、もう少し詳しく処理方法を書きます。

(1)そのBookを開き、ツール→マクロ→新しいマクロの登録を選択。
(2)ダイアログボックスを確認、マクロ名(今回はMacro1のまま)を入力し、OK。
(3)そのBookを適当な名前(今回はBook1)で保存し、マクロの記録を終了。
(4)ツール→マクロ→マクロを選択、マクロ名を選択し、編集ボタンを押す。
すると、下記のようなモジュールが現れる。
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2006/8/29
'
ChDir "C:\Documents and Settings\管理者\保存するフォルダ○○"
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\管理者\保存するフォルダ○○\Book1.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
End Sub

ので、Filename:=の後の " から .xls" までを Range("A1") & ".xls" と変更する。

2については済みません。解りません。

1は、前回の回答で間違いありませんが、もう少し詳しく処理方法を書きます。

(1)そのBookを開き、ツール→マクロ→新しいマクロの登録を選択。
(2)ダイアログボックスを確認、マクロ名(今回はMacro1のまま)を入力し、OK。
(3)そのBookを適当な名前(今回はBook1)で保存し、マクロの記録を終了。
(4)ツール→マクロ→マクロを選択、マクロ名を選択し、編集ボタンを押す。
すると、下記のようなモジュールが現れる。
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2...続きを読む

Qファイル名に自動的に日付と日時を使いたい

バッチファイルやコマンドプロンプトの存在を今日知ったばかりで、
いま一夜漬けで勉強していますが同時に質問もさせてください。

とあるソフトによるファイルの保存先が
[C:\Program Files\soft\folder\name.jpg] [参照ボタン]
のようになっていて、データの保存自体はモニタをつけずにキーボードだけでできるのですが、
上のように名前が固定なので新規ファイルの保存のたびに上書きされてしまいます。
(保存のたびにリネームする必要がある)

そこで現在の日付と時刻を動的に取得してファイル名にする仕組みを、
上のパスに盛り込めないかとweb上をあさっています

過去の質問を見たところ勉強不足でよく理解できず、また用途も微妙に違う気がしました
御助力をお願いいたします。

Aベストアンサー

日付と時刻を取り出すには環境変数から簡単に引くことが出来ます。
例えば日付は %date%  時刻は %TIME% ですね。

コマンドラインで
>echo "%DATE%" "%TIME%"

と打ってみてください、"2011/10/07" "10:03:49.53" のように返してきます。

これを利用すればお望みのことはできるのですが実はそんなに簡単ではありません。
というのは、この日付と時刻で返してきたデータには「/」や「:」といった、
ファイル名としては利用できない文字が含まれています。
ファイル名を生成する場合にはこれらの文字を取り除き、数字の部分だけを使わなければなりません。

dateやtime変数から、数字の部分だけを取り出すには、単に「%date%」「%time%」とするのではだめで、
変数値の部分文字列抽出用の修飾を行う必要があるのです。

日付で考えると
「2011/10/07」のような文字列の入ったdate変数から数字の部分だけを抜き出すには、

年: 最後尾より10文字目から、4文字分
月: 最後尾より5文字目から、2文字分
日: 最後尾より2文字目から、2文字分

を取り出せばよい事が分かりますね。
具体的には以下のような記述を使います。

%date:~-10,4%%date:~-5,2%%date:~-2,2%

試しにコマンドラインで確認すると・・・
>echo %date:~-10,4%%date:~-5,2%%date:~-2,2%
20111007

となります。

時刻にしても然りです。
しかしここにも落とし穴があります。

午前0時から午前10時(00:00:59~9:59:59)の場合、time変数が返す文字列の先頭には、「0」ではなく、空白文字が含まれます。
(00、01、02……、09、10、11、……ではなく、0、1、2、……、9、10、11、……となるのです)。
つまり時(0~23)の数値はゼロサプレスされて表示されていので時間を取り出すために
なので単純に「%time:~0,2%%time:~3,2%%time:~6,2%」とすると、先頭に空白文字が入っている可能性が生じます。
これをそのままファイル名やバッチファイルのパラメータとして利用すると、空白文字によって引数の区切りとして扱われるなどの不具合が生じる可能性が生じます。

なので、time変数に含まれる空白文字を、最初に数字の0に置き換えておくようにします。
変数の置換は「%V:s1=s2%」と記述します。ここでs1には空白1文字を、s2には「0」を指定します。
具体的には、一時変数に入れて置換します。
>set time2=%time: =0
これで先頭に空白があれば0に置き換えられます。

ここで「%time%」の内容をいったん変数time2に入れてから次の行で2桁ずつ取り出しているのは、文字列の置換と部分抽出を同時に行えないからです。
その後に
>echo %time:~0,2%%time:~3,2%%time:~6,2%
とすれば午前午後に関係なく同じ桁数の時刻が返されます。

これらを利用してバッチファイルを記述してください。
もし、date変数を3回参照している間に日付が変わってしまっても問題がないようにするためには別のテクニックが必要です。

以上ご参考に。

日付と時刻を取り出すには環境変数から簡単に引くことが出来ます。
例えば日付は %date%  時刻は %TIME% ですね。

コマンドラインで
>echo "%DATE%" "%TIME%"

と打ってみてください、"2011/10/07" "10:03:49.53" のように返してきます。

これを利用すればお望みのことはできるのですが実はそんなに簡単ではありません。
というのは、この日付と時刻で返してきたデータには「/」や「:」といった、
ファイル名としては利用できない文字が含まれています。
ファイル名を生成する場合にはこれらの文字を取...続きを読む

Qエクセルマクロで任意のファイル名をつけて保存したい

 エクセルVBAについての質問です。
 エクセルのマクロで、Aというファイルを開いて、そのうち必要なワークシートだけを抽出し、新しいブックに移動し、その新しいブックを新しいブックのsheet1のセルC2の文字列をファイル名として保存するようなマクロをくみたいと思っています。
 ファイルを開いて必要なワークシートだけを抽出し、新しいブックに移動するところまではできましたが、新しいブックのセルC2の文字列をファイル名として保存することができません。FNを変数として宣言して、C2の文字列を代入し、FNをファイル名として保存しようとすると、ファイルにFNという名前が付いてしまいます。どうすれば、C2の文字列をファイル名として保存できるのでしょうか。なお、保存するフォルダはc:\変換ファイル\6月です。どなたか教えてください。よろしくお願いします。

Aベストアンサー

FNを文字列として扱っていませんか?以下でどうでしょう?


Sub 保存()

Dim FN As String
FN = Range("C2")
ActiveWorkbook.SaveAs Filename:="C:\変換ファイル\6月\" & FN & ".xls"
End Sub

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q[Excel] ファイル名を変数指定して保存するマクロ

Excelで、セルA1の値の名前でファイルを保存したいのですが、マクロがうまくかけません。
ご存知の方、教えて下さい。

Aベストアンサー

簡単ですが、下記で可能です。
Sub ファイル保存()
ThisWorkbook.SaveAs Cells(1, 1).Value
End Sub
■指定のフォルダに格納する場合は、ファイルメニュ「ツール」→「オプション」の「全般」タブの「カレントフォルダ名」にフォルダを指定してください。

Q保存先のフォルダ名を指定したいとき

希望する事は
ファイルを保存するフォルダを指定し、
ファイル名(インプットボックスをつかって
変数として入力させたもの)をつけて保存したい。
フォルダは事前に作成してあるが
保存したい場所はそのときによってまちまちなので
保存するたびにフォルダを指定したい。


具体的には
C:\入力済みデータ\【○○】としたいのですが
この【○○】の部分を、そのときに応じて選択するにはどうすればいいでしょうか。

または、浅知恵で
Application.Dialogs(xlDialogSaveAs).Show arg1:="c:\"
というかたちでダイアログボックスを出すまでは出来たのですが
ファイル名は空欄になってしまいますよね。

InputBoxでファイル名を変数として入力させたものを
上のファイル名に入れることは可能ですか?

どうぞよろしくお願いします。

Aベストアンサー

これでできませんか?
まず条件どおり、C:\入力済みデータ の中にいくつかのフォルダを用意しました。
Excel 2003 を新規に立ち上げ、新規ワークブックに標準モジュールを挿入し、以下のコードを書き込んで実行しました。

Sub hoge()
Dim initPath As String
initPath = "C:\入力済みデータ"
Dim saveFilePath As String
saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xls),*.xls")
If Not (saveFilePath = "False") Then
ThisWorkbook.SaveAs saveFilePath
End If
End Sub

"ファイル名を指定して保存" のダイアログが表示され、初期フォルダとして C:\入力済みデータ が開かれています。
ファイル名は何も指定されていません。
ダイアログの中には当然、先に作っておいたいくつかのサブフォルダが一覧表示されているので、ユーザーは
1) サブフォルダを選択する。
2) ファイル名を入力する。
3) [保存] ボタンをクリックする。
というアクションを行う。

私のところではダイアログ表示時の初期フォルダとして My Documents ではなく、きちんと C:\入力済みデータ が開かれましたよ。

これでできませんか?
まず条件どおり、C:\入力済みデータ の中にいくつかのフォルダを用意しました。
Excel 2003 を新規に立ち上げ、新規ワークブックに標準モジュールを挿入し、以下のコードを書き込んで実行しました。

Sub hoge()
Dim initPath As String
initPath = "C:\入力済みデータ"
Dim saveFilePath As String
saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xls),*.xls")
If Not (saveFilePath = "False") Then
ThisWorkbook.SaveAs saveFilePath
End If
End Su...続きを読む

Qエクセルで「名前を付けて保存」を自動的に名前を付けて保存したい

エクセルで「名前を付けて保存」をする時に自動的に名前を付けて保存が出来るように出来ないでしょうか。

エクセルで見積書を作成後に「名前を付けて保存」→「受注番号入力」をしているので、これを「名前を付けて保存」をクリックした時にファイル名を自動的に受注番号が入れば少しでも時間短縮が出来るかと思い、相談させていただきます。
自分なりに参考書などを読み、下記のようになると思ったのですが、出来ません。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

If SavaAsUI Then
Application.EnableEvents = False
Application.Dialogs(xlDialogSaveAs).Show _
Arg1:=Me.Path & Application.PathSeparator & Sheet(1).Range("A1").Value
Application.EnableEvents = True
Cancel = True
End If

End Sub

シート1に見積書があり、シート2、シート3はありません。
「A1」のセルに受注番号が入っています。
これのどこがダメなのか教えてもらえませんか。
もし、他に方法があるのであれば教えていただけませんか。

ご無理申します。

エクセルで「名前を付けて保存」をする時に自動的に名前を付けて保存が出来るように出来ないでしょうか。

エクセルで見積書を作成後に「名前を付けて保存」→「受注番号入力」をしているので、これを「名前を付けて保存」をクリックした時にファイル名を自動的に受注番号が入れば少しでも時間短縮が出来るかと思い、相談させていただきます。
自分なりに参考書などを読み、下記のようになると思ったのですが、出来ません。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
...続きを読む

Aベストアンサー

こんにちは。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.Dialogs(xlDialogSaveAs).Show _
Arg1:=Me.Path & Application.PathSeparator & Sheets(1).Range("A1").Value
End Sub

上記でどうでしょう

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。


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

人気Q&Aランキング