• ベストアンサー

Excel ファイル操作マクロ

Excel で、[ファイル][名前を付けて保存]をマクロで行うようにしました。 新しいファイル名にはマクロで日付記号を付加してあります。 このあと、すぐにもとのファイルを開き、新しくできたファイルを閉じる操作を、マクロで行いたいのですが、どうしたらよいでしょうか。 あるいは、別名コピーという方法はあるのでしょうか。 教えて下さい。よろしくお願いします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

> メッセージボックスでの確認は、どのみち上の空になって、手間がかかるだけですから、ファイルコピーは直接実行したいと考えています。 変数Fnをメッセージボックスで取り出せるんだから、ファイル名に持っていけばいいだけの話じゃないですか? #3のコードに付け加えると以下の通りです。」 Sub test02() dv = IIf(Day(Date) < 11, Date, Date + 21) fn = Format(dv, "YYMM") & ".xls" Sheets.Copy ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\ユーザー名\デスクトップ\" & fn ActiveWindow.Close End Sub

awazo
質問者

お礼

merlionXXさん ありがとうございました。

awazo
質問者

補足

merlionXXさん ありがとうございます。 試してみましたら、次のようなエラーメッセージが出ました。 -------------------- 実行時エラー'1004' ファイル'c:\MyDocuments\Trrec'にアクセスできません。次のいずれかの理由が考えられます。 ・ファイル名またはパス名が存在しな可能性があります ・開こうとしているファイルは、ほかのユーザーまたはプログラムによって開かれています。他のプログラムで開いている場合、ファイルを閉じた後、もう一度実行してください。 ・保存しようとしているファイルと同じ名前のファイルが、既に読み取り専用のファイルと -------------------- ブック内の全シートがコピーされた \book1 ができています。 \Trrec は、記録用に作ったフォルダーです。

その他の回答 (6)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.7

> ファイル'c:\MyDocuments\Trrec'にアクセスできません。 このパスの記述が間違っているのでは? 自分でマクロの記録で\Trrec にファイルを保存してみて、どういう記述になるか確認してみたらどうでしょう?

awazo
質問者

お礼

merlionXXさん いろいろありがとうございました。 下記のとおりで巧くいきました。 Filename:= の尻尾のところを書き間違えていたようです。.xls の記述はこの場合不要でした。 ------------------------------------------------ Sub 別名保存() 'もとのファイル名のあとに年月(セルA10の値:0707表示)を加え、シートのデータのみ保存 Dim fn As Long fn = Format(Sheets("Sheet1").Range("A10").Value, "yymm") Sheets.Copy ActiveWorkbook.SaveAs Filename:="C:\My Documents\Trrec\MacroTest" & fn End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

一文字抜け落ちてました! Σ( ̄ロ ̄lll) 訂正です。 dv = IIf(Day(Date) < 11, Date, Date + 21) fn = Format(dv, "YYMM") & ".xls" MsgBox fn

awazo
質問者

お礼

merlionXXさん ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

毎月、10日までなら当月を、11日以降なら翌月を"yymm" 形式で、今なら 0707のようにしたいということですね? dv = IIf(Day(Date) < 11, Date, Date + 21) fn = Format(d, "YYMM") & ".xls" MsgBox fn ではいかが (^∇^)?

awazo
質問者

お礼

merlionXXさん ありがとうございました。

awazo
質問者

補足

merlionXXさん ありがとうございます。 > 毎月、10日までなら当月を、11日以降なら翌月を"yymm" 形式で、今なら 0707のようにしたいということですね? いいえ、そういうふうに値を取り出せる関数のセルが作ってあって、そこから出した値"yymm"をコピー先のファイル名のうしろに書き加えたいということです。 なお、メッセージボックスでの確認は、どのみち上の空になって、手間がかかるだけですから、ファイルコピーは直接実行したいと考えています。 よろしくお願いします。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

#2です。 もとの全シートをコピーして名前をつけて保存するサンプルです。 もとのシートは閉じません。 Sub test01() fn = Format(Now(), "hhmmss") & ".xls" MsgBox fn & "(現在時間)として保存します。" Sheets.Copy ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\ユーザー名\デスクトップ\" & fn ActiveWindow.Close End Sub

awazo
質問者

お礼

merlionXXさん ありがとうございました。

awazo
質問者

補足

merlionXXさん ありがとうございます。 Format () の使い方がよくわからないので、教えてください。 実はすることがちょっと込み入っておりまして、このファイルコピーを実施する日が中旬以降の場合には翌月の表示になるようにしてあります。 表示形式は、m"月"とし、今日 07/06/29 現在なら 7月 となります。 関数は =IF(MONTH(NOW()-10)>=12,1,MONTH(NOW()-10)+1) です。 このセルから値を "yymm" 形式で取り出し、今なら 0707 として、ファイルコピーするとき、今のファイル名のあとに加えたいのです。 よろしくお願いします。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

もとのファイル全体を名前を付けて保存するのではなく、必要なシートだけをコピーして日付記号を付加した名前で保存し、終了させれば、もとのファイルは終了せずに開いたままですよ。

awazo
質問者

お礼

merlionXXさん ありがとうございました。

awazo
質問者

補足

merlionXXさん ありがとうございます。 よくわからないので教えて下さい。 > 必要なシートだけをコピーして日付記号を付加した名前で保存 1.シートのコピー先は新しいブックですか? 2.一つのシートだけを抜き出して直接保存はできませんか?

回答No.1

えーザックリですが・・・ ----- (1)本体ブック(A)から、ファイル名を指定して複製ブック(B)を保存  ※ここで自分自身は複製ブック(B)になっている (2)本体ブック(A)を開きなおす (3)複製ブック(B)を閉じる(保存確認なし) ----- の手順で可能だと思います 例)----- Administratorでログイン状態でデスクトップにBook1.xlsを作成し マクロ(sub test())内に下記を書けば動くかと・・・ (1) ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\Administrator\デスクトップ\Book2.xls" (2) Workbooks.Open Filename:="C:\Documents and Settings\Administrator\デスクトップ\Book1.xls" (3) ThisWorkbook.Close False

awazo
質問者

お礼

nullnullpoさん ありがとうございました。

関連するQ&A