ここから本文です

エクセル マクロ セル値をBOOK保存名に

oyo********さん

2009/6/2109:25:25

エクセル マクロ セル値をBOOK保存名に

エクセルマクロで決まった位置のセルの値を保存名にして名前を付けて保存

マクロを使って下記の作業をしたいのですが、ご教示下さいますでしょうか。

特定のセル(a1,b1として)にデータがあるファイルがあります。

この状態で以下の事が出来るマクロを貼り付けたいのですが。。。

★a1+スペース+b1と繋げたものをブック名にして かつ
★「保存しますか?」とメッセージボックスが出て
★Yesを実行すると必ず指定したフォルダに自動で保存しブックを閉じてくれる
Noなら”何もせずに修了します”と出て、保存せず作業続行

このような使用イメージです。
実は下記リンクの通り過去にも同様の質問をさせて頂いて、作成できたと思っていたのですが、実際は私のやり方が悪いのか出来ませんでした。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1426796904

どうぞ宜しくお願い致します。

補足hotosys様早速の回答有難うございます。
1点,ファイル名として指定するセルに日付が入っておりまして、このセルを名前として指定すると保存先名のあとに来てパス名が存在しないというエラーになりました。※例えばCドライブのtempフォルダを保存先にすると "c:\temp\"となりますが、指定セルに日付2009/06/21とあると "C:\TEMP\2009\06"にアクセスできません。となります。
日付セルを指定した状態で上記エラーを回避できないものでしょうか?

閲覧数:
39,429
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hot********さん

編集あり2009/6/2118:18:45

こんなのでどうでしょうか?
保存するのは自分自身(ThisWorkbook)の場合です。
当然のことですが、元のファイル名と違う場合は、自分自身のファイル名が変更されます。
Sub sample()
Dim fileName As String
fileName = Range("A1") & " " & Range("B1") 'ファイル名作成
If MsgBox(fileName & " で保存しますか?", vbYesNo) <> vbYes Then Exit Sub '保存するか確認して保存しない場合は終了
Application.DisplayAlerts = False '同名のファイルがある場合の警告禁止(必要なら)
ThisWorkbook.SaveAs "c:\temp\" & fileName '指定フォルダに保存
Application.DisplayAlerts = True '警告許可(上で警告禁止した場合は警告許可に戻す)
End Sub

新しいブックを作って保存する場合。
Sub sample()
Dim newBook As Workbook
Dim fileName As String
fileName = Range("A1") & " " & Range("B1") 'ファイル名作成
Set newBook = Workbooks.Add '新しいブックを作成
'色々な処理
If MsgBox(fileName & " で保存しますか?", vbYesNo) <> vbYes Then Exit Sub '保存するか確認して保存しない場合は終了
Application.DisplayAlerts = False '同名のファイルがある場合の警告禁止(必要なら)
newBook.SaveAs "c:\temp\" & fileName '指定フォルダに保存
Application.DisplayAlerts = True '警告許可(上で警告禁止した場合は警告許可に戻す)
newBook.Close SaveChanges:=False '保存せずに閉じる
End Sub

[ 補足への回答 ]
ファイル名やフォルダ名に使えない文字というのがいくつかあって、\/:*?"<>|などがダメなようです。
そのため/を-に変更して2009-06-21としたり、20090621としたり、2009_06_21とするしかないようです。
fileName = Range("A1") & " " & Range("B1") 'ファイル名作成
の後に
fileName = Replace(fileName, "/", "-") '/を-に
または
fileName = Replace(fileName, "/", "") '/を削除
で、/を他の物に変更してみてください。

質問した人からのコメント

2009/6/22 14:02:12

感謝 できました。他の方も有難う御座いました。

ベストアンサー以外の回答

1〜1件/1件中

jin********さん

編集あり2009/6/2206:04:04

まず最初に、前回と同じような質問をしても同じような回答が返ってくるだけなので、
具体的にどう出来なかったのか書いたほうがいいと思います。
自分の書いたコードを載せてこの行でこんなエラーが出るとか、
エラーは出ないけど期待した結果にならないとか。

次に補足を拝見して思ったのですが、"C:\TEMP\2009\06"というフォルダは存在しているのでしょうか?
フォルダが存在していなければエラーになるのは当たり前ですよ。
プログラムでファイルを保存する時は、以下の点に気を付けます。
・絶対パス、または相対パスで保存先を指定する。
・指定されたパス内のフォルダは全て存在している
・パスとして使用できない文字は使わない

なので、運用上確実にフォルダは存在するという仕様でなければ、
保存する前にフォルダの存在を確認し、なければフォルダを作成する
というプログラムを組まなければなりません。
フォルダの存在確認は Dir関数 または FSO(FileSystemObjectオブジェクト)の FolderExistsメソッド でわかります。
フォルダを作成するには MkDir ステートメント または FSOの CreateFolder メソッド で出来ます。
フォルダ作成時の注意点は 上から順番にひとつづつ作らなければならない 事です。
Dir関数、MkDirステートメントはヘルプを。
FSOのリファレンスは
http://msdn.microsoft.com/ja-jp/library/cc428071.aspx
を参照してください。
使用例はこのあたり
http://officetanaka.net/excel/vba/filesystemobject/index.htm
か、FileSystemObjec で検索すれば色々見つかります。
フォルダの作成については
http://www.atmarkit.co.jp/fwin2k/operation/wsh11/wsh11_01.html
このへんが参考になるかと思います。

追記
A1 B1 両方のセルが空白だった場合(またはB1だけが空白)や、
ファイル名として使ってはいけない文字が含まれてるかどうかも考慮しないといけませんね。

そうすると処理の流れは
最初に「保存しますか?」とメッセージボックスを出して
「はい」なら保存して終了
「いいえ」なら何もせず終了
保存の詳細は
・ファイル名の妥当性チェック
・フォルダの妥当性&存在チェック→なければ作成
・SaveAsで保存
みたいな感じになると思います。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる