• ベストアンサー

エクセルVBAでファイルを別で保存する

ファイルA1,A2,・・・A9,b1,b2・・・と百個くらいファイルがあって、 それを別フォルダにひらがなでわかりやすい名前をつけて保存したいです A1は商品○○、A2は商品▲▲、・・・というような感じです。 月初にこの作業を行っています。 いつもa1~全部そろっているわけではなくA2がなかったり、B5がなかったりいろいろです。 毎月の作業で面倒なので自動化したいのですが どのようにしたらいいのでしょうか? 1個1個ファイルを開いて、名前をつけて保存する、という作業で組んでみましたが ファイルがないところでエラーになってしまいました。 また、1個1個ファイルを開いて、保存、という作業を100回位繰り返して書いてみたんですが もっとスマートな書き方はあるんでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.5

エラーで閉じちゃうのは、強制終了されるって事? 皆さんの回答で問題は無いと思うのですが、、、 原因は別の所にあるのでは? まずはシンプルな環境でテストしましょう。 1.適当なフォルダを作り、Book1.xls と Book3.xls を置きます。 2.新規ブックに下記のマクロを記述して上記と同じフォルダに   保存(必須)します。(ファイル名は Test.xls とする) '------------------------------------------------------------- Sub Test_File_Copy() Dim myPath As String, myFolder As String  myPath = ThisWorkbook.Path & "\"  myFolder = myPath & "Temp"  'コピー格納用のフォルダを作成  If Dir(myFolder, vbDirectory) = "" Then MkDir myFolder  For i = 1 To 3   If Dir(myPath & Cells(i, 1)) <> "" Then     FileCopy myPath & Cells(i, 1), _        myFolder & "\" & Cells(i, 2)   End If  Next i End Sub '------------------------------------------------------------- 3.Test.xls の Sheet1に下記のように記述してマクロを実行 A列       B列 Book1.xls   Ren1.xls Book2.xls   Ren2.xls Book3.xls   Ren3.xls 4.正常に行けば、フォルダ内に Temp フォルダが作成され、   Book1.xls と Book3.xls が Ren1.xls と Ren3.xls と言う   名前で Tempフォルダに格納されます。 上手くいかないようなら、ファイル名 や 既存ソースなどを提示 しましょう。

narmy
質問者

お礼

早速お答えくださってありがとうございました。 とても丁寧でわかりやすく大変助かりました。 今は家からなので明日、会社にてテストしてみます。 (上のと同じのは今ためしにやってみました。問題なくできました) 何度もありがとうございます。

narmy
質問者

補足

5番の方の方法で無事解決することができました。 errorの方法もまったく知らなかった方法ですので これからも使っていこうと思います。 今回のもどうしてエラーが出てしまったのか考えてみようと思っています。 5名様ともご親切に回答くださり、ありがとうございました。 これからもがんばって勉強していきます。 またの機会がございましたらよろしくお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • Zero_0
  • ベストアンサー率35% (72/201)
回答No.4

毎月のファイル名がわかっていて同じようなパターンで変換するのなら、セル上に変換前と変換後のファイル名を書いておいてVBAでセルの読み出し、ファイルのリネームをループで行えばどうですか。 セルA1~ 旧ファイル名  セルB1~新ファイル名 on error goto ErrTap for i=1 to 100 OrgFileName = cells(i,1) NewFileName = cells(i,2) Name OrgFileName As NewFileName next i on error goto 0 exit sub ErrTap: resume next あまりにも雑なプログラムですが・・

narmy
質問者

お礼

丁寧にありがとうございました とてもわかりやすかったです。 ほとんど同じようにやったのですが エラー手前までは旨くできました。 前のずらずら長いものよりずっと見栄えがよくなりました。 しかし、エラーのところで処理が終わり、ファイルが 閉じてしまいます。 そのような命令文は一切なかったのですがerrorを使うとこういう事態が起こる事ってあるのでしょうか?

すると、全ての回答が全文表示されます。
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

#2さんも書かれているように Dir や FileSearch でフォルダ内のファイルを取得して処理すればエラーは回避出来ます。 それよりも ファイル A1.xls → 商品○○.xls ファイル A2.xls → 商品▲▲.xls と命名するための基礎データが何処にあるのか不明です。 各ファイルを開く事で、決まったセルから「商品○○」や「商品▲▲」を取得出来るのですか?

narmy
質問者

お礼

errorのやり方でうまくいかないのでフォルダ内の・・・というやり方も考えようと思っています。 ありがとうございました。

narmy
質問者

補足

説明不足で申し訳ありません ファイル名はもともとエクセルの中にあって、 エクセルにファイルa1→○○と書いてあります。 forを使って順番にファイルを指定することはできましたが 100個くらいある中で毎月ないものが異なるので エラーがどうしても出ることになります。

すると、全ての回答が全文表示されます。
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

うまく理解出来ている状態ではありませんが・・・(私) 1.フォルダからファイル一覧(ファイル名)を取得 2.適当な変換テーブルからファイル名を取得 3.ファイルを、取得したファイル名で任意のフォルダにコピー FileCopy "c:\tmp\OldData.txt", "c:\tmp\NewData.txt" という手順ではいかがでしょうか?

参考URL:
http://www.officetanaka.net/excel/vba/file/file07.htm
narmy
質問者

お礼

私がやりたかったことです。 説明不足ですみませんでした。。。 参考URLとても参考になりました。 はじめ私がやろうと思っていた考え方でした。 明日この方法でチャレンジしようと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.1

エラーが生じとき、そこを飛ばして次に進むには、On Error GoTo ステートメントを使います。 簡単な例を書きますので、あとは応用してください。 つぎのプログラムは、a1.xls, a2.xls, a3.xls を、別の名前 b1.xls, b2.xls, b3.xls で保存します。 ------------------- Sub ファイル名変更()   Dim i As Integer   Dim wb As Workbook   For i = 1 To 3     Set wb = Workbooks.Open("C:\data\a" & i & ".xls")     wb.SaveAs "C:\data\b" & i & ".xls"     wb.Close False   Next End Sub --------------------- ところが、たとえば a2.xls が無かったら、そこでエラーとなって止まります。 そこで、つぎのように変えます。 ------------------------- Sub ファイル名変更()   Dim i As Integer   Dim wb As Workbook   On Error GoTo エラー処理   For i = 1 To 3     Set wb = Workbooks.Open("C:\at\a" & i & ".xls")     wb.SaveAs "C:\at\b" & i & ".xls"     wb.Close False 次のファイル:   Next Exit Sub エラー処理:   Resume 次のファイル End Sub ----------------------- このようにすると、エラーが生じたらそこを飛ばして次に進みます。ただし、エラーの原因は「ファイルが無い」だけでなく、他の原因のエラーでも次に進みますから、それを区別したければさらに工夫が必要です。 なお、プログラムの途中に On Error GoTo 0 と書くと、そこから先で生じたエラーは処理されず、普通にエラーメッセージを出して止まるようにできます。

narmy
質問者

お礼

丁寧にありがとうございました とてもわかりやすかったです。 おかげさまでファイルを開くところが旨くできましたが、 エラーのところに来ると、開いたファイルがすべて閉じてしまいます。 そこまではきちんと動作しているようですがエラーのところから先はできていません。 どうしてこうなってしまうのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A

  • マクロ VBA ファイル名を連番でつけたいのですが

    マクロ初心者なので教えて頂けるとうれしいです。 保存先フォルダにファイル名を自動で名前をつけて保存させるところまでできたのですが、 保存先フォルダに同名フォルダがある場合に、 もともと指定しているファイル名のお尻に連番をつけていくようにしたいのですが・・・ 例) 選択したシートをコピーして、 「A1+B1+見積書.xls」 という名前をつけて毎回保存していくのですが、 同名のファイルがある場合、 「A1+B1+見積書+1.xls」 「A1+B1+見積書+2.xls」 「A1+B1+見積書+3.xls」    …というふうにお尻に自動で連番をつけて 保存できるようにしたいのです。 宜しくお願い致します!

  • アウトルックのVBA添付ファイルの保存について

    アウトルックのVBAについて、 受信と同時に添付ファイル(Excel)をフォルダに自動保存したいのですが下記条件があります。 1.添付ファイル名:*A日報* (「A日報」を含むファイル名)   差出人:Aさんのみ   フォルダ;デスクトップの「Aさんの日報」フォルダ 2.添付ファイル名:*A議事録* (「A議事録」を含むファイル名)   差出人:Aさんのみ   フォルダ;デスクトップの「Aさんの議事録」フォルダ 3.添付ファイル名:*B日報* (「B日報」を含むファイル名)   差出人:Bさんのみ   フォルダ;デスクトップの「Bさんの日報」フォルダ 4.添付ファイル名:*B議事録* (「B議事録」を含むファイル名)   差出人:Bさんのみ   フォルダ;デスクトップの「Bさんの議事録」フォルダ 5.添付ファイル名:*B報告書* (「B報告書」を含むファイル名)   差出人:Bさんのみ   フォルダ;デスクトップの「Bさんの報告書」フォルダ http://q.hatena.ne.jp/1218725545の方と良く似ているのですが、 同一人物から、ファイル名で保存先を変える方法がどうしても分かりません。。。 どうかよろしくお願いします!!

  • エクセルVBA:毎月名前が変わるエクセルファイルを毎月異なるフォルダから開く

    まず、私はマクロ初心者です。なにぶん複雑でVBAのマニュアルには載っていなかったり、マニュアルにあったとしても、私自身初心者のため応用がきかず、こちらに投稿させていただきました。 目的は在庫データの集計で、集計するためのフォーマット(ファイルA)があり、ファイルAから、とあるシステムから抽出する月度別の在庫データ(ファイルB)を、月度別のフォルダから自由にファイルを指定するVBAを作ることは可能でしょうか。 ただ、そのファイルBが少々曲者で、下記の条件があります。 *<ファイルBの条件>********************* 1.とあるシステムから抽出するデータ(ファイルB)は、自動でエクセルに変換されCドライブに保存さますが、ファイル名が、基本ファイル名、たとえば「物流在庫」の後ろに抽出年月日と時刻が「-200912021354」という風に数字で表記されてしまうため、毎月変わります。 2.Cドライブにいったん保存されたファイルBを、会社の共有パソコンへ移動させるのですが、(部門名)フォルダ→年度別フォルダ→月度別フォルダ→在庫データフォルダと複数のフォルダを経由して、最終的に在庫データフォルダの中へ移動させています。 ******************************** 担当者が変わっても誰でもこの業務ができるようにしたいので、ファイルBの名前を変える(抽出年月日+時刻部分を削除する)という作業は避けたいと思っています。 よろしくお願いいたします。

  • 特定のエクセルファイルをcvsで保存するスクリプト

    毎月決まった作業があり、バッチ処理したいので教えてください。 2007.xlsファイルの○○Sheetを△△フォルダに△△.cvs保存したいと 思います。 たった、これだけなのですが、VBScriptでバッチ処理するスクリプトを 教えてください。 ショットカットをクリックするだけでこれが自動化できると 作業がシンプルになります。

  • VBA ファイルの保存方法

    hiroです。 Excel Aファイルを「名前を付けて保存」で、Bというファイル名で保存し、かつ Aファイルをそのまま開きっぱなしにしたいのですが、方法がわかる方教えてください。 通常、「名前を付けて保存」後、Bファイルが即座に開かれて、Aファイルが閉じてしまいます。 理由 (1)Aファイルは閉じたくない、保存したくない (マクロ、セル関数付) (2)Aファイルのマクロ動作後の情報をファイルBとして保存し、ファイルAはそのままにしたい (3)Bファイルはマクロ削除、セル関数はB側で持ちたい  → シートのコピーはセル関数がA側になってしまうので、使用できない わかる方がいらっしゃいましたら、教えてください。よろしくお願いします。 環境 Microsoft XP Excel 2003

  • エクセル、VBAを使ってのファイル保存。

    エクセルでファイル(既存)を開いたら まず「名前を付けて保存」をして 新しく作ったファイルで作業を進めたいのですが 毎回保存のファイル名が変わるので 固定の名前での記述(VBA)が出来ません。 そこで、保存手前の段階である ダイアログボックスを表示させた状態で終わらせる というマクロは出来るのでしょうか? (保存先を決めたりファイル名を入力する状態) 色々試してみたのですが、どうにもうまく行かず… 皆さんの知恵をお借りしたいです。 宜しくお願いします。

  • Excelマクロでエクセルファイルのファイル名を変更して保存、他

    Excel97のマクロを使用して以下の作業を実施したいのですが どなたかご教示お願い致します。 1.フォルダ内の複数ファイルから任意の一つのファイルAを開き、そのファイルA内の任意のセル(1A)の文字列をファイル名にして保存する。 2.あるファイルBを開き、ファイルB内のあるセル(1A)の"文字列が含まれるフォルダ"を検索してそのフォルダ内に保存する。 3.あるフォルダ(\1)内のあるファイルCを開き所要の作業を実施し閉じたあと、そのファイルCを別のフォルダ(\2)へ移動する。 4.あるフォルダ(\3)内のファイルDを開き、ファイルDのファイル名と同じ文字列を含むフォルダ(\4)を検索し、そのフォルダ(\4)内から、 ファイルD内のあるセル(1A)の文字列と同じファイル名のファイルEを検索して開く。 いくつも質問して真に厚かましいですが 解る物だけでも結構ですので 何卒、宜しくお願い致します。

  • エクセルVBAで一つ上の階層を指定して保存したい

    お世話になります。 VBA初心者なりにマクロの自動記録などで作業しておりますが、自動記録でできない作業を一つ教えてください。 現在作業しているフォルダは、Activeworkbook.Pathなどで指定できますが、その一つ上の階層に保存したいという場合、どう指定すればよいのでしょうか? 自動保存だと"Documentos and Settinng~"などから始まるファイルパスになりますが、ファイルを保存するフォルダは各人によってまちまちですので、自分が保存したフォルダの一つ上という指定をしたいのです。そのような方法があれば教えてください。 よろしくお願いいたします。

  • エクセルで作業後、同じ名前の別ファイルで上書きしてしまいました!

    エクセル(98)で作業をして、こまめに上書き保存をしていたのですが、ファイルが出来上がったあと、同じパソコン上の別の場所に同じ名前のファイルがあり、それらをひとつのフォルダにまとめようとして、別のファイルは不要だったので上書きしたのですが、正しい方を勘違いしていて、不要なファイルで上書きされてしまいました。 自動バックアップなどあると思うのですが、正しいほうはどこかに残ってないでしょうか?2日間に渡る作業がすべて消えてしまい、絶望です!誰か教えてください。

  • EXCELファイルを保存するプログラムについて

    指定のEXCELファイルを開き、名前を変えて保存するプログラム(ソース)を必要としています。以下に詳細を記入します。 EXCELファイルを開く (1)36ファイルの中から6ファイルを開く。 (2)その6ファイルは利用者がボックス等に入力して選ぶ。 EXCELファイルを保存 (1)それぞれ別名で保存したい。 (2)保存名はあらかじめ"A","B","C","D","E","F"とする。 (3)別フォルダに保存したい。(あらかじめ保存フォルダを作成しておいてもよい) 例;6ファイルから2ファイルを開き、別名で保存する場合(EXCEL) 全6ファイル("1","2","3","4","5","6")があるとする →利用者がボックス等入力する   1{ "2" }   2{ "5" }  ※{  }をボックスに見立てている →"2","5"のファイルが開く →別名で保存する   1{ }は"A"   2{ }は"B"とあらかじめ決めておく →全6ファイルとは別に"A","B"というファイルが作られ全8ファイルとなる。 HSP3.0(2.6)かHTML Applicationsで、できるのではないかと考えています。他のプログラムは利用できる環境にありません。HSP3.0(2.6)は基本的プログラムを組むことができますが初心者です。HTML Applicationsにおいては全くの初心者です。 もとより、このようなプログラムは可能でしょうか? ご回答よろしくお願いいたします。

このQ&Aのポイント
  • NEC PM950/sノートのモニターが突然認識されず、画面が真っ暗です。外部モニターへの接続では問題なく表示されますが、ディスプレイの設定画面には通常のディスプレイが表示されず、ノートPCのモニター自体が認識されていない可能性があります。
  • NEC PM950/sノートのモニターが認識されない問題について助けが必要です。PCを起動しても画面が暗く、外部モニターに接続すると正常に表示されますが、ディスプレイの設定画面には通常のディスプレイが表示されません。お知恵を拝借できると幸いです。
  • NEC PM950/sノートのモニターが認識されないトラブルについて質問があります。突然、PC本体のモニターが認識されず、起動しても画面が真っ暗です。外部モニターに接続すると表示されますが、ディスプレイの設定画面には通常のディスプレイが表示されないため、ノートPCのモニター自体が正常に認識されていない可能性があります。助けをお願いします。
回答を見る

専門家に質問してみよう