• ベストアンサー

エクセルVBAでセルにあるファイル名のファイルを同じくセルにあるフォルダ名のフォルダにコピー

お世話になります。 絶対パスがあり、コピー元、コピー先(格納先)としてシート上の操作で ファイルをフォルダにコピーしたいのですが、VBAでできるでしょうか? ・B列B6以下にコピー元のファイル名(絶対パス) ・D6に格納先のフォルダ名(絶対パス) があります。 この条件だけでコピー→格納するコードを教えていただけたら助かります。よろしくお願いします。

  • wait4u
  • お礼率45% (619/1365)

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

  • ベストアンサー
回答No.3

またまた#1です。 (^o^)丿 同名ファイルがあるときは xxxx_01.jpg の形式の連番を付加して別名で保存する のを考えてみました。(連番は Max10 まで) ファイル名とコピー先のフォルダパス名にアンダースコア( _ )が付いていない ことが条件です。 Sub Test2()  Dim i, OldFile, OldName, FileExt, NewFile, NewName, n, Pos  i = 6  Do While Cells(i, 2) <> ""   On Error Resume Next   MkDir Cells(6, 4).Value  'コピー先に指定したフォルダがない場合は作成。   OldFile = Cells(i, 2)   OldName = Right(OldFile, Len(OldFile) - InStrRev(Cells(i, 2), "\") + 1)   OldName = Left(OldName, InStrRev(OldName, ".") - 1)   FileExt = Right(Cells(i, 2), Len(Cells(i, 2)) - InStrRev(Cells(i, 2), ".") + 1)   NewFile = Cells(6, 4) & OldName & FileExt   NewName = Left(NewFile, InStrRev(NewFile, ".") - 1)   If Dir(NewFile) <> "" Then    For n = 1 To 10     Pos = InStrRev(NewName, "_")     If Pos = 0 Then Pos = Len(NewName)     NewFile = Left(NewName, Pos) & "_" & Format(n, "00") & FileExt     If Dir(NewFile) = "" Then Exit For    Next   End If   FileCopy OldFile, NewFile   'Kill OldFile   i = i + 1  Loop End Sub

その他の回答 (2)

回答No.2

#1です。 FileCopyを使った場合は、常に上書きになります。 同名ファイルがあった場合、コピー先の既存ファイルに連番をつける ことは、私にはむずかしかったものですから‥‥。 (^^ゞ なお、On Error Resume Next は、B列セルに記述されたファイルが なかった場合に、無視して次の行を処理させるためにつけました。

回答No.1

稚拙ですが―― Sub Test()  Dim i, OldFile, NewFile  i = 6  Do While Cells(i, 2) <> ""   On Error Resume Next   OldFile = Cells(i, 2).Value   NewFile = Cells(6, 4).Value & _         Right(OldFile, Len(OldFile) - InStrRev(OldFile, "\") + 1)   i = i + 1   FileCopy OldFile, NewFile   ' Kill OldFile  '元ファイルは削除したい場合はこの行を生かします。  Loop End Sub

wait4u
質問者

お礼

misatoannaさんありがとうございました。ばっちりでした。 ひとつ質問させていただきたいのですが、 フォルダにファイルをコピーして格納します。 再度同じパスをコピーして格納すると、予想では「すでに同じ名前のファイルがあります・・・」というような表示が現れると思ったのですが、再度同じファイルをフォルダに入れてもそのような表示がありませんでした。On Error Resume Nextかな?と思ってコメントアウトした のですが、それは関係ないようでした。こうゆうものでしたでしょうか?

関連するQ&A

  • EXCEL 指定のフォルダ内にあるエクセルをコピー

    どなたかVBAの記述(コード)を教えて下さい。 指定のフォルダ内にあるエクセル(コピー元)を開きコピー、データを順次、指定のエクセル(コピー先)のシートの上から順番に貼付していきたいのです。コピー貼付が終わったら、コピー元のファイルは別のコピー済のフォルダへ移したいです。 フォルダ名は、自分で指定できますが、コピー元のエクセルのファイル名とシート名は一定ではありません。(コピー元ファイルはシート1枚のみ)。セル範囲は、A~F列、行は毎回変動するので、一番下の行を判定する必要があります。 コピー先のファイルは、指定のシート(※)に上から順番に貼り付けをしたいです。 (※セルに入力して指定したいです。) 不足事項などがありましたら、ご指摘いただけると助かります。 よろしくお願いいたします。 なお、簡単な関数のVBAは理解して使えるのですが(IF~ End If、For ~Next 等)、 イベントのプロシージャーなどが今だ理解できず、自分では書くことができません。 そのため。多少コードが長くなってもいいので、イベント・プロシージャーをなるべく使わない書き方のほうが自分で修正することができ、助かります(イベントを使わないと難しい処理でしょうか・・・)。

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • フォルダ名だけを取得するVBA

    VBAを使ったエクセルテンプレート適用ツールを作成しているのですが そのVBAのことで教えてください。 現在自作のフォーム上にあるテキストボックスにフルパスが入っているとします(添付図参照)。 *この前提は必須と考えてください。 次に作成ボタンをクリックすると Step1 新しいブックが開かれ行幅や書式などが自動で調整されます。 Step2 ブックの保存ダイアログが自動で開きます。     ただし、保存ダイアログが開いた時点で自作フォーム中の     テキストボックスで指定したフルパスに移動しており、     且つ移動先のフォルダ名(<-注意!!フルパス名ではありません!!)と     同じ文字列をファイル名入力欄に自動で入力されるようにします。    ex) D:\MyProject\Project01\TaskA\にブックを作成し保存する場合、      保存ダイアログのファイル名欄にTaskAとだけ書く。 マクロ自体はここでストップし、これ以降はユーザーがそのファイルメモで 保存してよいかどうかを判断し、問題なければ手動でダイアログ上の「保存」ボタンを押します。 問題はStep2で、保存先のフォルダ名と同じ文字列を保存ダイアログのファイル名に記入するには どのようなコードを書いたらよいでしょうか。 私自身としては下記の二案を考えているのですがそれぞれについて疑問があるので教えてください。 案1 作成ボタンを押した時点でテキストボックスに書かれているフルパスの文字列から   末尾にあるフォルダ名だけを取得して変数に代入し、これを保存ダイアログの   ファイル名欄に反映させる。   疑問:テキストボックスのValue値に書かれているフルパスを示す文字列から      末尾のフォルダ名だけを取得するためのコードは何と書けばよいのでしょうか? 案2 ブックの保存ダイアログが開いて保存先のパスに移動してから今保存ダイアログで    開いているフォルダ名を取得する。    疑問:今アクティブになっているブックが保存されているフォルダ名だけを取得する    方法なら確かあったような気がしています。    しかし今保存ダイアログで表示されているフォルダ名を取得するコードは何と    書けばよいのでしょうか?    そもそもそういったコードや操作自体VBAにあるのでしょうか?

  • エクセル VBA 別のフォルダのブックからコピー

    Cドライブに格納されているブックのシート1のA列の内容を、Dドライブに格納されているブックのシート1のA列にコピーする場合、やはりブック名が分からなければ、ソースを書く事は不可能でしょうか。可能であれば教えていただけませんでしょうか。 ※Cドライブのフォルダ名は常に変わらず、その中には一つしかブックは入っていない。 よろしくお願いします。

  • エクセルVBAで、元になるファイルをコピーし、ファイル名を連続した日付

    エクセルVBAで、元になるファイルをコピーし、ファイル名を連続した日付としたいのですが、 ボタン一つで、ファイル名を、2010.1.1請求書.xls~2010.1.31請求書.xlsとして、 2010.1.1請求書のシート1のA1セルに、その日付2010.1.1を入力保存し、ファイルを連続作成する コードはどのようになるのでしょうか?  VBA初心者です。ご教授お願いします。

  • VBAで特定のフォルダ内のエクセルファイルをPDF

    VBAで特定のフォルダ内のエクセルファイルをPDFに変換する作業しているのですが Filename:=ThisWorkbook.Path & "\" & Replace(f.Name, fs.GetExtensionName(f.Path), "pdf"), _ 出来上がったファイル名を コード_日付にしたく Filename:=ThisWorkbook.Path & "\" & ("コード") & Range("B9") & ("_") & Format(Now, "yyyymmdd") & ".pdf", _ に入力したのですがB9セルのコードが入りません。 どこが間違っているのでしょうか?

  • フォルダのアドレスと選択したファイル名のコピー

    フォルダのアドレスと、そのフォルダ内で選択されているファイルのファイル名を 一括でコピーする方法はありますでしょうか。 画像のような状態で何か操作することで 下記のように保存先とファイル名をコピーできるようにしたいです。 --------------------------------- \\ああああ\いいいい\・テスト テキスト.txt --------------------------------- ※「 テキスト.txt 」ファイルは開いていない状態です。 エクセルを立ち上げている状態ならVBAを使えばコピーできる  など 何か方法が無いかお知恵頂きたいです。 何卒宜しくお願い致します。

  • エクセル表のパスからのコピー処理について

    お世話になります。 エクセルVBAで質問です。 下記のような表をエクセルで作り、A列の名称が元フォルダのパス、 そのフォルダの中にエクセルとパワポやワードのファイル名が入っているとします。 その中の全てのファイルをコピーで同じ行のB列のフルパスのフォルダ内にコピーしたいのですが、マクロなどでの作成方法を教えてくだい。 A列 B列 C:\a1 Z:\test1 C:\a2 Z:\test2 C:\a3 Z:\test3 ・ ・ ・ バッチファイルであれば簡単なことですが、エクセルの表で管理したい次第です。 コピー先フォルダ内に同じファイルがあれば上書きしても構いません。(何回実行して同じファイルが上書きされてもOK) 出来ればxcopyで実行したいのですが、VBやVBAで使えるコマンドなのか、また繰り返し処理や応用に慣れてないため、詳しい方ご教授いただけると幸いです。 例えばC列以降に元のコピー対象ファイルを全て書き出してから、それらの一つ一つのファイルを読み込んでB列のフォルダ内にコピーするような動きでも問題ありません。 リスト作成する行の数は毎回決まっていなく、最大で50くらいあります。 ぜひ、ご教授お願いします。

  • ExcelVBAでセルに入力された値をみて複数のファイルコピーするマクロ

    VBA初心者です。関連する質問はみたのですが、組み合わせが他と違い うまくできませんでした。 EXCELのマクロを使って、それぞれ格納場所が異なる2つのエクセルファイル(格納元D:\AAA\123A.xlsと格納元D:\BBB\123B.xls)をコピーして指定のフォルダ(格納先D:\ZZZ\)内へ2つファイルを保存したいのですが・・ Private Const cnsSrc = "D:\AAA\123A.xls" Private Const cnsDst = "D:\ZZZ\123A.xls" Sub COPY_Func() ' ファイルをコピー FileCopy cnsSrc, cnsDst End Sub まで考えたんですが 複数のファイルまでコピーさせることができませんでした。 また、それぞれのフォルダ内には○○○A.xlsと○○○B.xlsが複数あるため コピーするファイル名は選択させたく、sheet1のA1セルに入力された"123"を みて123A.xls123B.xlsをコピーさせたいのですが、可能でしょうか? 宜しくお願い致します。

  • VBAフォルダやファイル操作について

    VBA初めての初心者です。 VBAのフォルダとファイル操作関連の質問です。(初心者です) 【やりたいこと】 画面から、 入力フォルダのパスを入力する・・・(1) 出力フォルダのパスとファイル名を入力する・・・(2) ・処理概要 入力されたフォルダ内のファイルを順次読み込み、 リネームして、出力フォルダに追加出力する。 (1)フォルダ内全ファイルを出力して終了する。 追加処理として、 (1)を複数入力できるようにしたいと思います。 ・詳細処理 出力フォルダのファイルネームは、連番であり、 画面での入力(2)ファイル名から連番したファイル名(+1していく) 出力するデータ内容は(1)のコピーのままでよい。 入力されたフォルダ内の全てのファイルを実行して終了する。 このようなプログラムなのですが、 初心者で、 わかりません。 思うようにコーディングしても 動きません???? どのように コーディングすればいいですか?

専門家に質問してみよう