重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。
絶対パスがあり、コピー元、コピー先(格納先)としてシート上の操作で
ファイルをフォルダにコピーしたいのですが、VBAでできるでしょうか?

・B列B6以下にコピー元のファイル名(絶対パス)
・D6に格納先のフォルダ名(絶対パス)
があります。
この条件だけでコピー→格納するコードを教えていただけたら助かります。よろしくお願いします。

A 回答 (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
    • good
    • 0

#1です。



FileCopyを使った場合は、常に上書きになります。

同名ファイルがあった場合、コピー先の既存ファイルに連番をつける
ことは、私にはむずかしかったものですから‥‥。 (^^ゞ

なお、On Error Resume Next は、B列セルに記述されたファイルが
なかった場合に、無視して次の行を処理させるためにつけました。
    • good
    • 0

稚拙ですが――



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
    • good
    • 0
この回答へのお礼

misatoannaさんありがとうございました。ばっちりでした。
ひとつ質問させていただきたいのですが、

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

お礼日時:2008/04/20 17:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!