VBAを用いたファイル移動に関して教えていただきたく
質問させていただきます。
VBAでファイルを移動する方法、*htmlなど特定の拡張子および、指定フォルダ内の全ファイル移動といった方法はわかりましたが、セル内に
記載してあるもののみ移動するだけがわかりませんでした。
やりたいこととしては
事前にjpgというフォルダから
読み込んでおいたjpgファイルのファイル名の一覧が
A列、B列、C列に記載されているのですが、それをマクロを実行するとtestというフォルダへ移動するようにしたいのです。
画像をすべて移動するだけなら、別にVBAを使わなくても
エクスプローラーで事足りてしまいますが、
画像ファイルがすべて数字で表記されていること
jpgファイル名一覧は原本で、実際には、原本のファイル名の一覧から数行だけをコピーして、別のシートを立ち上げ、そのシートに貼り付けられたjpgのファイル名だけを移動したいのです。
ここを参考にするといい!ですとか、あれば、併せて教えていただければ幸いです。よろしくお願いいたします。
No.1
- 回答日時:
疑問点は何でしょう?
(1)セルからファイル名を得る方法
(2)ファイル名が全て数字かを調べる方法
(3)シートの作成方法
(4)シートへのコピー
(5)ファイルの移動方法
この回答への補足
早速のご連絡ありがとうございます。
疑問点はセルに入力した値をもとにした複数ファイルの移動方法です。
たとえば
A1 に1.jpg
A2 に2.jpg
A3 に3.jpg
B1 に4.jpg
B2 に5.jpg
C1 に6.jpg
C2 に7.jpg
という風に入力してあった場合に
事前に指定しておいたjpgというフォルダ内の
1.jpg 2.jpg 3.jpg 4.jpg 5.jpg 6.jpg 7.jpgというファイルを
testというフォルダに移動したいのです。
他にも説明不足な点がございましたら、ご指摘いただければ幸いです。
No.2
- 回答日時:
参考です。
(1)各列の最終行の求め方
A列: Cells(65535, 1).End(xlUp).Row
B列: Cells(65535, 2).End(xlUp).Row
C列: Cells(65535, 3).End(xlUp).Row
(2)セル内容の取得とパス名の形成
Dim 旧パス名 As String
Dim 新パス名 As String
旧パス名 = "C:\jpg\" & Cells(行, 列).Value
新パス名 = "C:\test\" & Cells(行, 列).Value
(3)ファイルの移動方法
http://msdn.microsoft.com/ja-jp/library/cc428039 …
(4)エラーハンドリング
・旧ファイルがない場合
・新ファイルが既に存在する場合
この回答への補足
Sub Movejpg()
Dim A_End, B_End, C_End
Set A_End = Cells(65535, 1).End(xlUp).Row
Set B_End = Cells(65535, 2).End(xlUp).Row
Set C_End = Cells(65535, 3).End(xlUp).Row
Dim auctions As String
Dim jpg As String
auctions = "C:\auctions\" & Cells(A_End, 1).Value
jpg = "C:\jpg\" & Cells(A_End, 1).Value
Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")
objFS.MoveFile auctions, jpg
End Sub
エラー処理はまだですが
上記のように組んでみました。
エラーが出てしまいました。
最初の最終行の求め方の部分で
実行時エラー 13
型が一致しませんとでてしまいました。
現在対処法を調べている最中ですが
時間がかかりそうなので、取り急ぎ報告させていただきました。
ご指摘いただければ幸いです。
No.3ベストアンサー
- 回答日時:
Const 移動元 As String = "C:\auctions\"
Const 移動先 As String = "C:\jpg\"
Dim FSO
Dim 最終行 As Long, 行 As Long, 列 As Long
Dim ファイル名 As String, 旧パス名 As String, 新パス名 As String
'== オブジェクトのインスタンス化
Set FSO = CreateObject("Scripting.FileSystemObject")
'== 最終行位置を求める
最終行 = Cells(65535, 1).End(xlUp).Row
行 = Cells(65535, 2).End(xlUp).Row
If 行 > 最終行 Then 最終行 = 行
行 = Cells(65535, 3).End(xlUp).Row
If 行 > 最終行 Then 最終行 = 行
'== エラーハンドリング開始
On Error Resume Next
'== 行のループ
For 行 = 1 To 最終行
'== 列のループ
For 列 = 1 To 3
ファイル名 = Cells(行, 列).Value
If ファイル名 <> "" Then '★空欄でなければ処理する
旧パス名 = 移動元 & ファイル名
'== 存在確認
FSO.GetFile 旧パス名
If Err.Number = vbNormal Then '★正常時のみ処理する
新パス名 = 移動先 & ファイル名
FSO.MoveFile 旧パス名, 新パス名
End If
'== エラーをリセットする
Err.Clear
End If
Next
Next
'== エラーハンドリング終了
On Error GoTo 0
Setはオブジェクト型の変数へ代入する場合に使用します。行位置などは
プリミティブな整数型なので、Setは使用しません。
返信が遅くなってしまい申し訳ありません。
まさに希望するとおりの動作をしてくれました。
正直記載していただいた内容は今の自分では
理解できない部分も多々ありましたが、
ご提示いただいた内容を自分の中で、今後
消化して、勉強していきたいと思います。
丁寧かつ迅速、的確な回答ありがとうございました。
No.4
- 回答日時:
1.あるフォルダ内のファイルを全て捕まえ尽くすコードはわかった。
2.拡張子で判別して、望みの物以外を捨てる方法もわかった。
3.それならファイルを1つ捉えた段階で、エクセルの指定シートのセル範囲に、そのファイル名があるか見に行く(総あたり比較でよいではないの)
4.あった場合はFSOのMoveFile (から),(へ)を使って異動すればよい。
ーー
3.4で判らないことがあるのですか。
>jpgファイル名一覧は原本で、実際には、原本のファイル名の一覧から数行だけをコピーして、別のシートを立ち上げ、そのシートに貼り付けられたjpgのファイル名だけを移動したいのです。
「張り付けられた」シートのセル範囲をファイル名を探す対象にすればよいのでは。なぜそれまでの前半文章説明(コピーしてとか立ち上げとかの説明)が必要ですか。
この回答への補足
回答ありがとうございます。
>「張り付けられた」シートのセル範囲をファイル名を探す対象にすればよいのでは。なぜそれまでの前半文章説明(コピーしてとか立ち上げとかの説明)が必要ですか。
たしかにおっしゃるとおりです。
後で読み返してみると、必要のない箇所が多々ありましたね。
今後はもっとわかりやすく簡潔に要点を伝えられるよう、
改善していきたいと思います。
ご指摘ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
- Excel(エクセル) 【VBA】フォルダAにある2つのファイルの内1つを、フォルダBへ。もう1つを、フォルダBへ移動したい 6 2022/07/26 08:51
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) 【VBAファイル移動】2つのマクロを順に実行。1つ目のマクロが実行不可⇒2つ目が実行不可となる件 2 2022/07/29 12:17
- Excel(エクセル) 【マクロ】ファイルを古い順に、1個ずつ移動する 1 2022/09/06 20:30
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
VBAでパワーシェルを実行したい...
-
初心者powershellのPS1ファイル...
-
VBS パスに変数を入れたい
-
SaveAsの保存先について
-
Excel 相対パス
-
SHGetPathFromIDList によるパ...
-
相対パスが使えない
-
outlook開けない
-
【VB.NET】App.configにファイ...
-
VBAで、VBのapp.pathと同じ機能...
-
【VBA】ExcelマクロでCSVファイ...
-
フォルダ名だけを取得するVBA
-
エクセルマクロでファイル名の...
-
アプリケーションのインストー...
-
エクセルVBAで複数の変数に、パ...
-
ShellExecuteでエクセルファイ...
-
エクセルのマクロで特定フォル...
-
VBA・LOGの取り方で質問です
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
エクセルのマクロで特定フォル...
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
開いているファイルを削除し、...
-
SaveAsの保存先について
-
初心者powershellのPS1ファイル...
-
fopenでのパス指定
-
VBA★PDFをPDFアプリで印刷し...
-
【Excel VBA】Power Qurry のソ...
-
指定したフォルダ内の最新ファ...
-
A列に記載されているフォルダ...
-
ExcelのVBAで上書き保存を確...
おすすめ情報