• ベストアンサー

エクセルマクロで 新規ブックにシートをコピーして保存

エクセルのマクロを使い 名前の決まっている特定のシートを 新規ブックにして名前をつけて保存をしたいのです. 色々参考にして以下のようなマクロを書いたのですが これだと元々のファイル名が変わって保存されてしまいました。 どなたかお知恵をお貸しください。 今作ったマクロ Sub p() Worksheets("印刷用日誌").Copy MsgBox Year(Now) & "-" & Format(Now(), "yy-mm") & "-" & Range("k7") On Error Resume Next Application.DisplayAlerts = False ThisWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00") Application.DisplayAlerts = True On Error GoTo 0 End Sub よろしくお願いします

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>ThisWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00") ThisWorkbook はコードが書かれているブックの事。 新規Bookに対してなら、 ActiveWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00") ではないかな?

makato_200
質問者

お礼

 新規にブックを作ったのでそちらがアクティブになっている  という理解が出来ました。  なぜかactiveだとコードが書かれているブックの意味だと思い込んで  しまい使う事すら考えませんでした。  落ち着いて考えると全くその通りです。 めからうろこがおちました。 どうも ありがとうございます。

その他の回答 (4)

回答No.5

>これで何をしたかったというと利用者が意識しないでシートのコピーを保存する作業をしたかったんです。 なるほど! そうすると そのブックはあなたが使うのではなく 別の方が使うという事ですね? そうすると、まず「マクロを有効にして開く」必要がありますよね?(無効にして開かれたら何にもならないです) で、マクロを有効にして開く為には「マクロのセキュリティレベルを中にする」必要がありますが大丈夫なんでしょうか? その辺は きちんと意識して(有効にして開く)いただかないといけないと思うのですが、 その辺は大丈夫でしょうか?

makato_200
質問者

補足

そうですね、マクロを有効にしなければなりませんです。 このマクロは全体の一部分なので、いずれにしてもマクロを使わなければ やりたい作業が出来ないのでした。 まあ、どっかから得体の知れないマクロ入りのエクセルファイル貰ってきて実行されてしまった場合の問題は有りますけど、マクロを使う事による便利さも捨てがたいですから色々啓蒙する必要はあると思います。 いろいろありがとうございます。

回答No.4

#3さんのおっしゃる事が ごもっともですね。 上記の操作が そんなに面倒ですか? シートを新規ブックに移すには。シートを右クリックで「移動またはコピー」→「新しいブック」 を選択すればOKだし、「名前をつけて保存」は新しいブックがアクティブになってる状態で「F12キー」を押せばダイヤログボックスが出てくるし。 まぁでも毎日毎日やる分には面倒でしょうか? 僕もシートを新しいブックにコピーまでは「ボタン」にマクロを登録してますからね。 なので僕の場合、単純に Sheets("印刷用日誌").Copy これだけです。 名前をつけるのもそんなに面倒な作業だとは思わないんですけどねぇ? Excelのメニューバーのヘルプでも色んなサイトでも様々なショートカットが掲載されてるので ご覧になられてはいかがですか?

makato_200
質問者

お礼

いろいろありがとうございます 実際に作成した部分を記載します。 Sub saveascopy() Worksheets("印刷用設備日誌").Copy On Error Resume Next Application.DisplayAlerts = False ActiveWorkbook.SaveAs Format(Now(), "yy-mm") & "-" & Range("k7") ActiveWorkbook.Close Application.DisplayAlerts = True On Error GoTo 0 End Sub これで何をしたかったというと利用者が意識しないでシートのコピーを 保存する作業をしたかったんです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

ここへ質問する前に、マクロの記録モードにして、質問の操作をして 、そのコードをみて、疑問があれば、質問すべきだ。ファイル名を年月と関連付ける行は別として、他はコードの骨格原型が判るはず。どうしてマクロの記録を重用しないのかな。マクロの記録など問題にせずというレベルではないでしょう。 >名前の決まっている特定のシートを新規ブックにして名前をつけて保存・・ 意味があいまい。 開いているブックのシート名AAのシートをコピーして シートタブで右クリック 移動またはコピー (移動先ブック名)新しいブック コピーを作成する の操作をする、 この操作を思いつきましたか。エクセルVBAはまづエクセルの知識ありきなんです。 ーー マクロの記録は Sub Macro1() Sheets("Sheet1").Select 'A Sheets("Sheet1").Copy Range("C2").Select ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\XXXX\My Documents\Book2.xls", FileFormat:=xlNormal _ , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub となった。 -- Aの行はSheet1はWorkSheets("XXX")とシート名xxxにする。 Book2.xlsの部分は年月指定のファイル名指定コードで置き換えた文字列を作る。 マクロの記録で余分なコードは削除 Range("C2").Select Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ Application.DisplayAlerts = Falseなどを入れる

makato_200
質問者

補足

すいません、エクセルまともに使った事無いのでした。 日本語の説明も下手なのですいませんです。 マクロの記録も使いますが、何が余分で何が必要か 考えるより、始めから作った方が勉強になると思って トライした結果でした。 んでは

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

すでに回答が出ていますが、ちょっと気になった所があったので >MsgBox Year(Now) & "-" & Format(Now(), "yy-mm") & "-" & Range("k7") MsgBox Format(Now, "yyyy-yy-mm-") & Range("k7") >ThisWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00") ActiveWorkbook.SaveAs Format(Now, "yyyy-mm-dd") と、した方がスッキリすると思います

makato_200
質問者

お礼

このあたりの構文は参考書等に記載あったのをアレンジしたのです。 yy-mm-でセルの値をつなげるやり方が出来るとは思いませんでした 実は&”ー”&を付けてつなげるのはなんだかなーと思っていた所でした どうもありがとうございます。