No.7ベストアンサー
- 回答日時:
No.6 の修正
上書き時にエラーが発生していました。
「Kill (先パス & "\" & Cells(行, 2).Value)」を次のように追加してください。
-----------------------------------------------------------------------------
Sub 送る()
Call 移動("送り")
End Sub
Sub 戻す()
Call 移動("戻し")
End Sub
Sub 移動(モード As String)
Dim 基本パス As String
Dim 元パス As String
Dim 先パス As String
Dim 行 As Long
Dim 回答 As Integer
基本パス = ThisWorkbook.Path & "\"
Sheets("管理シート").Select
For 行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If モード = "送り" Then
元パス = 基本パス & Cells(行, 1).Value
先パス = 基本パス & Cells(行, 3).Value
Else
元パス = 基本パス & Cells(行, 3).Value
先パス = 基本パス & Cells(行, 1).Value
End If
If Dir(元パス & "\" & Cells(行, 2).Value) = "" Then
Range(Cells(行, 1), Cells(行, 3)).Select
回答 = MsgBox("元のファイルがありませんでした。" & Chr(13) & _
"飛ばしてして作業を続けますか?" & Chr(13) & Chr(13) & _
"はい : 飛ばして続行" & Chr(13) & Chr(13) & _
"いいえ : 全作業を中止して終了", vbDefaultButton2 + vbYesNo, モード)
If 回答 = vbNo Then Exit Sub
Else
If Dir(先パス & "\" & Cells(行, 2).Value) <> "" Then
Range(Cells(行, 1), Cells(行, 3)).Select
回答 = MsgBox("同名のファイルがありました。" & Chr(13) & _
"上書きしますか?" & Chr(13) & Chr(13) & _
"はい : 上書きして続行" & Chr(13) & Chr(13) & _
"いいえ : 上書きせず、飛ばして続行" & Chr(13) & Chr(13) & _
"キャンセル : 全作業を中止して終了", vbDefaultButton1 + vbYesNoCancel, モード)
If 回答 = vbCancel Then Exit Sub
If 回答 = vbYes Then
Kill (先パス & "\" & Cells(行, 2).Value)
Name 元パス & "\" & Cells(行, 2).Value As 先パス & "\" & Cells(行, 2).Value
End If
Else
Name 元パス & "\" & Cells(行, 2).Value As 先パス & "\" & Cells(行, 2).Value
End If
End If
Next
MsgBox ("終了しました")
End Sub
-----------------------------------------------------------------------------
この回答へのお礼
お礼日時:2017/02/03 09:13
GooUserラック様 早々にご回答頂いていたのに、お返事が遅れて申し訳ございません。ばたばたしており、まだVBAを実装できていません。申し訳ないです。近日中に対応いたします。またご連絡させて下さい!
No.6
- 回答日時:
続いてメッセージを表示する場合
-----------------------------------------------------------------------------
Sub 送る()
Call 移動("送り")
End Sub
Sub 戻す()
Call 移動("戻し")
End Sub
Sub 移動(モード As String)
Dim 基本パス As String
Dim 元パス As String
Dim 先パス As String
Dim 行 As Long
Dim 回答 As Integer
基本パス = ThisWorkbook.Path & "\"
Sheets("管理シート").Select
For 行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If モード = "送り" Then
元パス = 基本パス & Cells(行, 1).Value
先パス = 基本パス & Cells(行, 3).Value
Else
元パス = 基本パス & Cells(行, 3).Value
先パス = 基本パス & Cells(行, 1).Value
End If
If Dir(元パス & "\" & Cells(行, 2).Value) = "" Then
Range(Cells(行, 1), Cells(行, 3)).Select
回答 = MsgBox("元のファイルがありませんでした。" & Chr(13) & _
"飛ばしてして作業を続けますか?" & Chr(13) & Chr(13) & _
"はい : 飛ばして続行" & Chr(13) & Chr(13) & _
"いいえ : 全作業を中止して終了", vbDefaultButton2 + vbYesNo, モード)
If 回答 = vbNo Then Exit Sub
Else
If Dir(先パス & "\" & Cells(行, 2).Value) <> "" Then
Range(Cells(行, 1), Cells(行, 3)).Select
回答 = MsgBox("同名のファイルがありました。" & Chr(13) & _
"上書きしますか?" & Chr(13) & Chr(13) & _
"はい : 上書きして続行" & Chr(13) & Chr(13) & _
"いいえ : 上書きせず、飛ばして続行" & Chr(13) & Chr(13) & _
"キャンセル : 全作業を中止して終了", vbDefaultButton1 + vbYesNoCancel, モード)
If 回答 = vbCancel Then Exit Sub
If 回答 = vbYes Then
Name 元パス & "\" & Cells(行, 2).Value As 先パス & "\" & Cells(行, 2).Value
End If
Else
Name 元パス & "\" & Cells(行, 2).Value As 先パス & "\" & Cells(行, 2).Value
End If
End If
Next
MsgBox ("終了しました")
End Sub
-----------------------------------------------------------------------------
※ 問題発生時のメッセージボックスのタイトルに「送り」か「戻し」を表示しました。
※ 問題発生箇所が判るようにセルを選択しました。
※ 終了のメッセージを表示しました。
No.5
- 回答日時:
まずフォルダーに関してだけ
A列、C列にドライブ名を含めたフルパスが書かれているならば、
「元パス = 基本パス & Cells(行, 1).Value」は「元パス = Cells(行, 1).Value」
「先パス = 基本パス & Cells(行, 3).Value」は「先パス = Cells(行, 3).Value」
で済んでしまいますが見難くありませんか?
共通な部分を「基本パス」に書き込んでいれば見やすくなります。
「ThisWorkbook.Path」はマクロの書かれたファイルの場所を基準に出来るのでパソコンのドライブ構成などに影響されにくいので簡単に扱えると思うのですが…
No.4
- 回答日時:
No.3 追補
「基準になるホルダーを固定する」ならば、以下のような感じに修正してください。
「基本パス = ThisWorkbook.Path & "\"」
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
「基本パス = "C:\Users\XXXX\Documents\"」
No.3
- 回答日時:
「マクロがあるファイル(管理シート)の有るホルダーを基準のホルダーにする。
」で作成してみました。-----------------------------------------------------------------------------
Sub 送る()
Call 移動(True)
End Sub
Sub 戻す()
Call 移動(False)
End Sub
Sub 移動(送り As Boolean)
Dim 基本パス As String
Dim 元パス As String
Dim 先パス As String
Dim 行 As Long
基本パス = ThisWorkbook.Path & "\"
Sheets("管理シート").Select
For 行 = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If 送り Then
元パス = 基本パス & Cells(行, 1).Value
先パス = 基本パス & Cells(行, 3).Value
Else
元パス = 基本パス & Cells(行, 3).Value
先パス = 基本パス & Cells(行, 1).Value
End If
If Dir(元パス & "\" & Cells(行, 2).Value) = "" Then
MsgBox ("ファイルがありません")
Exit For
End If
If Dir(先パス & "\" & Cells(行, 2).Value) <> "" Then
MsgBox ("同名ファイルがありました")
Exit For
End If
Name 元パス & "\" & Cells(行, 2).Value As 先パス & "\" & Cells(行, 2).Value
Next
End Sub
-----------------------------------------------------------------------------
※ 移動元にファイルが無いと途中で中止します。
※ 移動先に同じファイルがあると途中で中止します。
No.2
- 回答日時:
どちらの方が良いでしょうか?
①マクロがあるファイル(管理シート)の有るホルダーを基準のホルダーにする。
②基準になるホルダーを固定する。(例:C:\Users\XXXX\Documents)
No.1
- 回答日時:
単純に以下のような感じではダメでしょうか?
・A1セルに元のフォルダー名、A2セルにファイル名、A3セルに移動先フォルダー名が、それぞれ入っているものとします。
------------------------------------------------------------------------
Sub 送る()
Name Range("A1").Value & "\" & Range("A2").Value As Range("A3").Value & "\" & Range("A2").Value
End Sub
Sub 戻す()
Name Range("A3").Value & "\" & Range("A2").Value As Range("A1").Value & "\" & Range("A2").Value
End Sub
------------------------------------------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/12 16:58
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/21 09:28
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルのマクロコードの一部分を変更する方法について教えてください。 2 2023/02/17 08:40
- Excel(エクセル) Excel VBA 指定フォルダに格納されている全エクセルファイルに指定シートを挿入する方法について 1 2022/08/22 11:53
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 09:50
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どうかどなたか教えてください。
-
ニュー速VIPで使われるパスワー...
-
HEWのワークスペースが開けない
-
ActiveWorkbook.Pathの一つ上
-
Photoshop cc 正円形のパス線が...
-
Accessのフォームで商品の画像...
-
Accessマクロで出てくるコマン...
-
Axfcのダウンロードのパスワード
-
RmDirでフォルダが削除できない...
-
フォトショップの切り抜き
-
セルにフルパスを入力してPDFフ...
-
今度、関西に旅行に行こうと思...
-
エクセルである行以下全部を削...
-
EXCEL VBAで全選択範囲の解除
-
白飛びした(明るい)写真をiPhon...
-
「これが」「これで」いいです...
-
visual studio でインデントを...
-
gimpで色交換できません。
-
「無」と「未」の使い方
-
Excel 行列が選択出来ない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ディズニーランドのDPAとPPの取...
-
USJのスタジオパスとエクスプレ...
-
新幹線について
-
フォルダ選択でなくフルパスを...
-
Accessのフォームで商品の画像...
-
Axfcのダウンロードのパスワード
-
ActiveWorkbook.Pathの一つ上
-
HEWのワークスペースが開けない
-
Accessマクロで出てくるコマン...
-
iPhoneでメルカリのキャンペー...
-
ExcelVBA ショートカットファイ...
-
Photoshop cc 正円形のパス線が...
-
セルにフルパスを入力してPDFフ...
-
EXCELファイルのカレントフォル...
-
今度、関西に旅行に行こうと思...
-
相関関係とパス係数の関係
-
スキャンしたファイルを共有フ...
-
RmDirでフォルダが削除できない...
-
ヘルプマークって印刷した物を...
-
MSアクセスのjpgファイル表示
おすすめ情報
GooUserラック様
早々にお教え頂きありがとうございます。私の質問に足りないところがございました。
移動元のフォルダの中には、複数ファイルが入っていて、それを複数フォルダへ移動させたいのです。添付ファイルのような管理表を作成し、コントロールできたらいいなぁと思っています。いかがでしょうか?
移動元フォルダも移動先フォルダも同一フォルダ内にあるものと仮定して結構です。格納されているフォルダも異なる場合は、管理シートでそのフォルダの存するアドレス欄もつくればいいのでしょうか?それによるマクロが大変であれば、同一フォルダ内にあるフォルダ内ファイルの移動が同一フォルダ内の他のフォルダへ移動できれば大丈夫です。よろしくお願いします。
GooUserラック様 ご回答ありがとうございます。ただ、私は詳しくないので教えて頂いた内容がよくわかりません。ごめんなさい、、、。
「基準になるホルダー」とは、移動元、その移動したいファイルがおいてあるフォルダーのことを言っていますか?下記Excelシートでいうと、A列に記載のフォルダでしょうか?「ホルダーを固定する」もすみません、もう少しその意味を教えて頂ければと思います。
自動化したいことをもう一度申し上げると、マクロ記載のあるExcelファイルが存するフォルダー内に格納されている指定フォルダ(A列記載)から、同じくマクロ記載のあるExcelファイルが存するフォルダー内に格納されている別指定フォルダ(C列記載)へ指定ファイル(B列記載)のものが移ることを希望します。またその逆、つまり戻すこともA列とC列を書き直すことなしに別のマクロで自動化したいです。
続きを次質問で記載致します
続きです。
フォルダに同一名のファイルがあった場合は、「上書き」を確認の上、移動、上書きをすることを臨みます。
本当はA列、C列にフォルダパスを記載すれば、わざわざマクロ記載のあるExcelの存するフォルダ内で作業しなくて良いのかもしれません。そのようなVBAをお願いできるのでしょうか??
詳しくないのに、要望ばかりで申し訳ないです。どうでしょうか??