タイトルの件、ご存じの方は教えて下さい。
フォルダAの中には、下記の条件のとおり
2つのファイルがあります。
【やりたい事】↓
ファルダAの中にある2つのファイルがあります。
1つ目は、ファイル名に_aが付いていない。
⇒例:123abc.pdf
もう1つは、ファイル名前に_aが付いている
⇒123abc_a
【マクロにしたいところ】
●1目のファイルはAフォルダへ
【フォルダAの中身移動後:123abc.pdf】
●もう1つはBフォルダへ
【フォルダAの中身移動後:123abc_a.pdf】
VBAを利用して、移動したいです
【補足】
1回のマクロで、Aフォルダ2つのファイルが
Bフォルダ、Cフォルダへ移動して欲しいです。
【フォルダAにあるファイルの条件】
・個数⇒常に2個
・種類の種類⇒2個とも主にPDF、他、エクセル、パワーポイント、テキストなど
・ファイルの名前
⇒1つ目:文字の数や種類は、数値、ローマ字などいろいろ。決まりないです。
⇒例:123abc.pdf ああああ.pdf、
⇒2つ目:上記1つ目のファイルの末尾【拡張子の前】に _a が必ずついている。例:123abc_a、ああああ_a.pdf
※要は、2つのファイルがあり。
⇒1つ目は abc123.pdf
⇒2つ目は1つ目の名前に_aが付いたファイル
⇒abc123_a.pdf
【フォルダAのパス】
C:\Users\2020\Desktop\フォルダA
【フォルダBのパス】
C:\Users\2020\Desktop\フォルダB
【フォルダCのパス】
C:\Users\2020\Desktop\フォルダC
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
フォルダA内のファイルのチェックを厳密に行いました。
Option Explicit
Public Sub ファイル移動()
Const FolderA As String = "C:\Users\2020\Desktop\フォルダA"
Const FolderB As String = "C:\Users\2020\Desktop\フォルダB"
Const FolderC As String = "C:\Users\2020\Desktop\フォルダC"
Dim fsys As Object
Dim fdir As Object
Dim ffiles As Object
Dim mfile As Object
Dim fname(1) As String
Dim elm As Variant
Dim ctr As Long: ctr = 0
Dim elen As Long: elen = 0
Dim x As Long
Dim i As Long
Dim src As String
Dim trg As String
Dim ext(1) As String
If dir(FolderA, vbDirectory) = "" Then
MsgBox (FolderA & "が存在しません")
Exit Sub
End If
If dir(FolderB, vbDirectory) = "" Then
MsgBox (FolderB & "が存在しません")
Exit Sub
End If
If dir(FolderC, vbDirectory) = "" Then
MsgBox (FolderC & "が存在しません")
Exit Sub
End If
Set fsys = CreateObject("Scripting.FileSystemObject")
Set fdir = fsys.GetFolder(FolderA)
Set ffiles = fdir.Files
If ffiles.Count <> 2 Then
MsgBox (FolderA & "内のファイル数が不正")
Exit Sub
End If
i = 0
For Each mfile In ffiles
elm = Split(mfile.Name, ".")
If UBound(elm) < 1 Then
MsgBox (mfile & "に拡張子なし")
Exit Sub
End If
x = UBound(elm)
elen = Len(elm(x))
ext(i) = Right(mfile.Name, elen)
If LCase(Right(elm(x - 1), 2)) = "_a" Then
ctr = ctr + 1
fname(0) = mfile.Name
Else
fname(1) = mfile.Name
End If
i = i + 1
Next
If ctr <> 1 Then
MsgBox ("_aのファイル数不正")
Exit Sub
End If
If LCase(ext(0)) <> LCase(ext(1)) Then
MsgBox ("拡張子不一致")
Exit Sub
End If
src = FolderA & "\" & fname(0)
trg = FolderB & "\" & fname(0)
fsys.movefile src, trg
src = FolderA & "\" & fname(1)
trg = FolderC & "\" & fname(1)
fsys.movefile src, trg
MsgBox ("移動完了")
End Sub
No.5
- 回答日時:
>上記のVBAを連続して、そのまま、書いて end subで終わればいいのでしょうか?
ハイ
Sub MoveFile_Sample()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim 移動元ファイル As String
Dim 移動先ファイル As String
'1回目
移動元ファイル = "C:\Users\2020\Desktop\フォルダA\*_a.*"
移動先ファイル = "C:\Users\2020\Desktop\フォルダC"
fso.MoveFile 移動元ファイル, 移動先ファイル
'2回目(残りを移動)
移動元ファイル = "C:\Users\2020\Desktop\フォルダA\*"
移動先ファイル = "C:\Users\2020\Desktop\フォルダB"
fso.MoveFile 移動元ファイル, 移動先ファイル
End Sub
No.4
- 回答日時:
補足要求です。
1.フォルダA内には必ず2つのファイルがあるということですが、
仮に3つあった場合は、処理しないでOKですか?
2.フォルダA内には、必ず同じ拡張子のファイルが格納されていますか。
①abc123.pdf
②abc123_a.pdf の場合は理解できますが
①abc123.pdf
②abc123_a.txt
のように拡張子がことなる場合もありますか。
お問合せありがとうございます。
1⇒常に2つです。2つの場合は、処理しないでOKです。
2⇒常に同じ拡張子です。
以上、大変、お手数ですが、教えてくださいませ。
No.3
- 回答日時:
こんにちは
移動だけならこの方法が良いと思いましたので
https://oshiete.goo.ne.jp/qa/13056261.html
で回答しました
Scripting.FileSystemObjectについて調べて頂く為にも参考先のみ提示しました
返信が無かったので回答先を理解されたのだと思いましたが・・・
応用すれば、容易に出来ますね。
考え方?処理の手順をよく考えてみましょう
2つに分ける時に 特徴のある(一意で分けられる)ものから処理するべきです
ですので、先ずは _a の付くファイル名が対象になります
一意性を高める為、拡張子前の.を付加して
移動元ファイル = "C:\Users\2020\Desktop\フォルダA\*_a.*"
移動先ファイル = "C:\Users\2020\Desktop\フォルダC"
fso.MoveFile 移動元ファイル, 移動先ファイル
先に、この処理をすると残るのは _a が無いファイルですね
もう分けられている状態ですが、
C:\Users\2020\Desktop\フォルダBに移動したいのなら
もう一度 ファイルパスを変更して実行すれば良いと思います
移動元ファイル = "C:\Users\2020\Desktop\フォルダA\*"
移動先ファイル = "C:\Users\2020\Desktop\フォルダB"
fso.MoveFile 移動元ファイル, 移動先ファイル
2回の繰り返し処理の様になっていますが、取り敢えず、そのままでも良いでしょう
*移動元ファイル・移動先ファイル は、ざっくり名です
回答ありがとうございます。
2回の繰り返しを⇒1回のマクロ実行で実施するのは難しいですか?
上記のVBAを連続して、そのまま、書いて
end subで終わればいいのでしょうか?
ご教授の程、宜しくお願いします。
No.2
- 回答日時:
ああ、タイトル間違ってるのね。
何言ってるんだ?って思ったよ。
てか、質問本文もおかしなことになってるw
・・・本題・・・
ファイル名を取得して、その文字列にアンダーバー(_)が含まれるかどうかで
処理を分岐させれば良い。
・「Aフォルダ」にあるファイル名を1つ取得する。
・文字列にアンダーバーが含まれるか検査。
・「アンダーバーがあれば」そのファイルを
「Bフォルダ」に移動させる。
・「アンダーバーが無ければ」そのファイルを
「Cフォルダ」に移動させる。
(´・ω・`) 基本はこんなもん。
この手順の中で何が分からないのかを考え、改善方法を自身でインターネット上を検索してみましょう。
No.1
- 回答日時:
こんにちは。
Windowsのエクスプローラ右上ファイル検索で
1. *_a.*で絞り込み
2. 全選択
3. ファイル移動
4. 残ったものも移動
の4ステップでできることです。手動でいいと思いますけど、勉強目的なんですかね、、?
ファイル名で分岐処理することになりますけど、
IF InStr(1, filename, "_a") >0 Then
フォルダ移動処理
End If
何回かご質問されてる様ですけど、基本は一緒です。
動かなくても良いし、コピペでもいいので、まずはご自身で考えたことを出さないと、ただの作成依頼で終わりますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- 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
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 12:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/02 11:48
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
- Excel(エクセル) 1つのファイルを複数のフォルダにファイル名を【明日の日付】にして、コピーしたい 5 2022/12/13 20:11
- Excel(エクセル) フォルダAからフォルダBへファイルを移動するVBAについて 1 2022/07/21 22:47
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォルダは残してファイルだけ...
-
Google ドライブ ってフォルダ...
-
windows11におけるファイルの並...
-
ファイル名やフォルダ名に頼ら...
-
パーフェクトビューワー SDカ...
-
SDカード内にたくさんの文字化...
-
空フォルダの検索方法
-
Mac特有のフォルダ類
-
フォルダだけ削除する方法あり...
-
ファイルの比較について教えて...
-
C:\\Logs このフォルダは何で...
-
iTunesのbackupファイルが複数...
-
勝手にフォルダが作成されます...
-
VBA、フォルダのパスに環境文字...
-
フォルダ内の順番
-
フォルダの中にフォルダを作りたい
-
指定以外のファイルやフォルダ...
-
【VBA】フォルダAにある2つのフ...
-
エクセルのVBAで開いているファ...
-
2枚組みCDの取り込みを分け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォルダは残してファイルだけ...
-
勝手にフォルダが作成されます...
-
Google ドライブ ってフォルダ...
-
SDカード内にたくさんの文字化...
-
フォルダだけ削除する方法あり...
-
windows11におけるファイルの並...
-
USBメモリーの中のいらないファ...
-
エクセルのパスワードの一括解...
-
フォルダの中身を指す場合、な...
-
複数フォルダのファイルを1つ...
-
VBA、フォルダのパスに環境文字...
-
差分バックアップや増分バック...
-
C:\\Logs このフォルダは何で...
-
フォルダ内の順番
-
パーフェクトビューワー SDカ...
-
ZIPフォルダの中身をCDに焼く
-
指定以外のファイルやフォルダ...
-
空フォルダの検索方法
-
エクセルVBA:毎月名前が変わる...
-
フォルダ内のファイル移動が出...
おすすめ情報
ばっちしできました。ありがとうございます。