エクセルマクロでフォルダーの移動と削除

このQ&Aのポイント
  • エクセルマクロを使用して、開いているエクセルファイルをフォルダーに移動し、同じ名前で保存します。
  • また、エクセルファイルをCSVファイルに変換し、名前を「処理.csv」として保存します。
  • 最後に、開いているエクセルファイルを削除します。
回答を見る
  • ベストアンサー

エクセル マクロの記述(フォルダーの移動、削除)

現在開いているエクセルのファイルにマクロを記述し、 1 「処理済」というフォルダーに、開いているエクセルファイルを移動して、同じ名前でエクセルを保存する。 2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を「処理.csv」とし保存する。 3 現在開いているエクセルファイルは削除する。 以上の三つの処理をさせようと、以下のようにしましたが、1,2の処理は出来ましたが、3の開いているエクセルファイルが残ってしまいます。 以上三つの処理が一度に出来るマクロの記述を教えて下さい。 よろしくお願いします Sub マクロ() ActiveWorkbook.SaveAs Filename:="C:\処理済\" & ActiveWorkbook.Name ChDir"C:\CSV" ActiveWorkbook.SaveAs Filename:= "C:\CSV\処理.csv" _ , FileFormat:=xlCSV, CreateBackup:=False Application.DisplayAlerts = False If Workbooks.Count = 1 Then Application.Quit Else ActiveWorkbook.Close End If Application.DisplayAlerts = False End Sub

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

Excel2010では下記のような感じで出来ます。 それ以外のバージョンでも雰囲気はつかめるかと。 標準モジュールに Sub killTest() Dim orgBK As String orgBK = ThisWorkbook.FullName ThisWorkbook.SaveAs "e:\tmp\newBook.xlsm" ThisWorkbook.SaveAs "e:\tmp\newCSV.csv", xlCSV Kill orgBK Application.DisplayAlerts = False Application.Quit End Sub ファイルを適当な名前で保存。 再度開いて、killTest を実行。 上記の場合ではE:\tmp にファイルが保存されオリジナルは削除されています。

take6531
質問者

お礼

ありがとうございます。 一度閉じることはしたくないので、一つのマクロで処理したいのですが、良い方法はないでしょうか?

その他の回答 (4)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.5

ANo4について 話の流れで書いてしまったので、回答書いたときは気づいていませんでしたが、 ・・・結局ANo2の方の回答そのままのような。。。 (quitしなければ閉じないので同じ結果と思う。) で、これでまずいのは何でしょう?

take6531
質問者

お礼

Ano.2の方法でできました。 有難うございました。

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.4

ANo1ですが。 訂正。 できました・・・。 ただし 1 「処理済」というフォルダーに、開いているエクセルファイルを移動して、同じ名前でエクセルを保存する。 2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を「処理.csv」とし保存する。 3 現在開いているエクセルファイルは削除する。 の処理は変更します。 1 開いているエクセルファイルを「処理済」というフォルダーに、名前をつけて保存する。 (xlsで。) ⇒これで、元のファイルの排他制御が解除される。 2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を 「処理.csv」とし保存する。 ・・・これは影響しない。 3 元のエクセルファイルは削除する。 ・・・開いているエクセルファイルではないことに注意! ★できたプログラム(保存と削除だけですけど) C:\temp\test111.xls というファイルにボタンを作って処理してます。 Private Sub CommandButton1_Click() Dim OLDNAME As String OLDNAME = ActiveWorkbook.FullName ChDir "C:\temp\済" ActiveWorkbook.SaveAs Filename:="C:\temp\済\TEST111.xls", FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False Kill OLDNAME End Sub

take6531
質問者

お礼

Ano.2の方法でできました。 有難うございました。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

何のために何をしたいのか良く分からない部分があります・・。 新規ファイルを一度も保存していない場合は ディスク上にファイルが存在しません。 Excel上では仮の名前でBook1にはなっていますけどね。 なので、前回回答の、Kill orgBK はエラーになりますし そもそも存在しないので削除の必要もありません。 ですので、ファイルを適当な名前で保存して・・と回答した次第です。 既にディスク上にあるファイルを開いて 前回回答のコードを標準モジュールにコピペして即座に実行した場合は エラーにはなりません。 ただ、この場合はマクロ付きで保存されてしまいますので >現在開いているエクセルのファイルにマクロを記述 ではなくて 個人用マクロブックを作成して使用すれば http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1478105659 ↑2010の場合 Sub killTest() Dim trgBKName As String, trgBKFullName As String trgBKName = ActiveWorkbook.Name trgBKFullName = ActiveWorkbook.FullName If MsgBox(trgBKName & "ですか?", vbOKCancel) = vbCancel Then Exit Sub End If Workbooks(trgBKName).SaveAs "e:\tmp\" & trgBKName Workbooks(trgBKName).SaveAs "e:\tmp\newCSV.csv", xlCSV Workbooks(trgBKName).Close Kill trgBKFullName Application.DisplayAlerts = False Application.Quit End Sub のような感じで良いのかなと思います。 毎回モジュールにコピペする手間も必要ありませんし。 。。って、Siegrune さんが回答されていますね。

take6531
質問者

お礼

Ano.2の方法でできました。 有難うございました。

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

>現在開いているエクセルのファイルにマクロを記述し、 >・・・ >3 現在開いているエクセルファイルは削除する。 実行しているマクロが登録されているExcelファイルを削除しようと考えていませんか? 無理です。 開いているExcelファイルは排他使用されていますので、削除できませんし、 実行しているマクロのあるファイルを閉じるとマクロが終了して続きが処理できません。 (閉じて削除するという処理もできません。) 書かれているやりたいことをするためには、普通、 実行するマクロだけを格納した別のExcelファイルを用意して、 そのExcelファイルから、目的のExcelファイルを開いて処理して、閉じてから削除する 方法をとります。

take6531
質問者

お礼

ありがとうございました。 開いているファイルが現在あるフォルダーからなくなればいいので、ファイルを処理済ファイルに移動して、そこで閉じて保存してもよいのですが、そのようなことは出来ますか?

関連するQ&A

  • ExcelのマクロでCSVファイルを開くと遅いのですが

    ExcelのマクロでCSVファイルを開くと遅いのですが速く開く方法はありますか? 普通にファイル-開くに比べてかなり遅いです。 下記のVBAで記述してあります。 Workbooks.Open Filename:=fname ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, _ CreateBackup:=False ActiveWorkbook.Close savechanges:=False

  • CSV保存マクロ 日付が逆になり困っています。

    マクロに詳しい方、お願いいたします。 エクセルのシートで2018/1/21とセルに記載したものを 下記マクロ(標準モジュールにコード記載)して、CSVで保存しています。 実行後CSVを開くと、21/1/2018になって逆になります。 調べてもわかりません。よろしくお願いします。 Sub Macro1() Application.DisplayAlerts = False main_f = ActiveWindow.Caption out_pass = ActiveWorkbook.Path & "\" Out_name = ActiveSheet.Name Sheets(Out_name).Select Sheets(Out_name).Copy ActiveWorkbook.SaveAs Filename:= _ out_pass & Out_name & ".csv", _ FileFormat:=xlCSV, CreateBackup:=False ActiveWindow.Close Application.DisplayAlerts = True End Sub

  • エクセルVBAでファイルをCSV保存の仕方

    エクセルのシートをCSVファイルに保存するため以下のようなマクロを書きました。 Sub Macro1() Cells.Select Selection.Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.SaveAs FileName:="C:\WINDOWS\デスクトップ\Book1.csv", FileFormat _ :=xlCSV, CreateBackup:=False ActiveWindow.Close ThisWorkbook.Activate End Sub 一応これで保存できるのですが、自動記録でやったためファイルの名前が出てしまいました。 この部分をわたし以外の誰でも任意の名前をつけ、任意のフォルダーに保存できるように書き換えたいのです。 どのように記述すれば良いかお教えください。お願いします。

  • 2010excel の記述方法

    2007excelでマクロを記述したものが、実行エラー1004 「Save As メリッドは失敗しました Workbookオブジェクト」と表示されます。 テバックすると NewWkbook.SaveAs FileName:=FileName, FileFormat:=xlExcel8 がエラー表示されます。 すいません、教えてください If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close saveChanges:=False '##保存せずに終了 Exit Sub End If '##指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName, FileFormat:=xlExcel8 Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName, FileFormat:=xlExcel8←黄色 End If ' NewWkbook.Close saveChanges:=False Application.DisplayAlerts = True

  • Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙

    Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙動についてです。 マクロで次のような記述をしています。 Sub tekitou() Dim vntFileName As Variant vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="ファイルを開く" _ , MultiSelect:=False _ ) If vntFileName <> "False" Then Workbooks.Open Filename:=vntFileName End If うんたらかんたら End Sub このとき、ファイルを開くのダイアログをキャンセルしたときでも「うんたらかんたら」の部分が実行されてしまいます。 キャンセルを押したときにそこでそれ以降をスキップして何もなかったかのような挙動をさせるためにはどのような記述をすればいいのでしょうか?

  • エクセルVBA【ワークシートのコピー】について

    以下のVBA記述で、とあるエクセルファイルのシートをCSV化しようとしております。記述の場合、すべてのワークシートが対象となっていますが、10個くらいあるWorkSheetの【sheets(8)】のみを対象としたいのですが、どのようにしたら良いのでしょうか? お手数ですがご教授下さい。 Sub test() Dim sh As Worksheet Dim fname As String Application.ScreenUpdating = False For Each sh In ActiveWorkbook.Worksheets fname = "C:\temp\" & sh.Name & ".csv" sh.Copy With ActiveWorkbook .SaveAs Filename:=fname, FileFormat:=xlCSV .Close savechanges:=False End With Next sh Application.ScreenUpdating = True End Sub

  • マクロが思い通りに動きません

    エクセルでマクロを使いボタンを 作りました。ボタンを押すとHDDとDVDに保存される仕組みになっています Sub DVD() ChDir "E:\" ActiveWorkbook.SaveAs Filename:=Format(Now, "yyyy-mm-dd(hh時mm分ss秒)"), FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub Sub HDD() ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\***\デスクトップ\ファイル名.xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub これだとDVDへ保存が上手くいきません。DVDからエクセルを開いて使えば問題ないのですが、デスクトップから開くと日付入りのデータがデスクトップに保存されてしまいます。 どうやって書き換えたらいいでしょうか

  • エクセルマクロで抽出時間を4桁で返す

    下記の様に、開いたファイルを保存する際に別ファイルの更新日時をファイル名として使用したいのですが、2011/10/10 10:02 だとすると、時間の"0"の部分が抜けて20111010_12となってしまいます。必ず4桁表示にする書き方があればご教示下さい。よろしくお願いします。 Sub cngsave() Dim a As String a = FileDateTime("C:\001\ABC.xls") Workbooks.OpenText Filename:= _ "C:\001\VVV.xls" Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\001\保存\" & Year(a) & Month(a) & Day(a) & "_" & Hour(a) & Minute(a) & ".xls" End Sub

  • エクセルと同じファイル名でcsvを作成するマクロ

    エクセルからCSVファイルをYYMMDD付でマクロを使って 作ろうとしていますが拡張子の「.xls」がどうしても残ってしまいます。 例えば、「test.xls」が「test.xls070326.csv」のように。 これを「test070326.csv」とするにはどうしたらよいでしょう。 今のコードはつぎのようにしています。 Sub test1() Dim flname As Variant Dim wb As Workbook flname = ActiveWorkbook.Name + CStr(Format(Date, "yymmdd")) ActiveSheet.Copy ActiveSheet.SaveAs Filename:=flname, _ FileFormat:=xlCSV ActiveWindow.Close savechanges:=False ActiveWorkbook.Close End Sub これでもCSVとしては使えるのですが、気持ちがすっきりしません。 どなたか正解をお願いします。

  • エクセルのマクロでテキストを生成すると日付の表示書式が変わってしまう

    エクセルのシートをマクロを実行してテキストファイルを生成します。 マクロの記述は以下の通りです。 保存 ChDir "C:\Documents and Settings\All Users\デスクトップ" ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\All Users\デスクトップ\YA-SWK.txt", FileFormat:= _ xlCSV, CreateBackup:=False '終了 Application.Quit End Sub 元データのエクセルのシートに「2006/9/1」と入力されているセルがあるのですが、マクロを実行して生成されたテキストファイルでは「9/1/2006」と日付の表示順序が変わってしまいました。 この原因は何であるのかつかめません。 よろしくお願いします。

専門家に質問してみよう