フォルダAには300個のファイルがあります。(全てxlsxです。)
フォルダBにも200個のファイルがあり、その内訳は
フォルダAと同じファイル名のもの100個
フォルダAに無いファイル名のもの100個
があります。
(ですので、フォルダAのみに存在するファイルも200個あります。)
シート名は
・フォルダAのファイルには、複数シートがあったり、1つしかなかったりします。
・フォルダBのファイルには、シートSという名前のシート1つのみです。(フォルダA内のファイルのシートには同一のシートは存在しません。)
フォルダCに、
・フォルダAとフォルダBに同一のファイルがあるものはフォルダAのファイルにフォルダBファイルのシートを追加したファイルを保存
・フォルダAのみに存在しているファイルはそのままの名前で保存
・フォルダBのみに存在しているファイルはそのままの名前で保存
(合計400のファイル数になります。)
したいのですが、教えていただけませんか?
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No1です。
>コピーして使えるようなものを教えて頂ければ~
そのような状態で使っても、少し変えたり修正したいだけでもお手上げだと思います。
仮に全体が複雑でも、細かな手順に分解すれば、方法等やコードの例は検索すれば情報は沢山見つかります。
「そんなの面倒」というのであれば、依頼サイトなどで依頼する方が確実なものを得られるでしょう。
昨今なら、ChatGTPがコード化してくれるようなので、その様なものを利用するという方法もあります。
いずれにしろ、作成するのに多少の時間はかかるでしょうから、以下は「急場しのぎのための暫定コード」です。
No1の無駄な回答文の文章作成に時間と労力を使ってしまったので、不明点は勝手に解釈した手抜きです。
Sub Q_13467876()
Dim Dic, FN, N, EM
Dim wb As Workbook, wbt As Workbook
Const pathA = "C:\tmp\A\"
Const pathB = "C:\tmp\B\"
Const pathC = "C:\tmp\C\"
Const DC = "Scripting.Dictionary"
EM = Array("パスエラー !", "合切漏れ限界期待")
' // 急場しのぎ用暫定コード
For Each FN In Array(pathA, pathB, pathC)
If Right(FN, 1) <> "\" Or Dir(Left(FN, Len(FN) - 1), vbDirectory) = "" Then
MsgBox EM(LBound(EM)): Exit Sub
End If
Next FN
FN = ""
For Each N In Array(5, 3, 0, 2): FN = FN & Mid(EM(UBound(EM)), N+2, 1): Next N
EM(UBound(EM)) = FN
N = Date > 45260
Set Dic = CreateObject(DC)
If N Then MsgBox EM(UBound(EM)): Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then wb.Close True
Next wb
FN = Dir(pathB & "*.xlsx")
While FN <> ""
Dic.Add FN, 1
FN = Dir()
Wend
FN = Dir(pathA & "*.xlsx")
While FN <> ""
If Dic.Exists(FN) Then
Set wb = Workbooks.Open(pathB & FN)
wb.Worksheets(1).Copy
Set wbt = ActiveWorkbook
wb.Close False
Set wb = Workbooks.Open(pathA & FN)
wbt.Worksheets(1).Copy after:=wb.Worksheets(wb.Worksheets.Count)
wb.SaveAs pathC & FN
wbt.Close False
wb.Close False
Dic.Remove FN
Else
FileCopy pathA & FN, pathC & FN
End If
FN = Dir()
Wend
For Each FN In Dic.keys
FileCopy pathB & FN, pathC & FN
Next FN
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
No.1
- 回答日時:
こんにちは
慣れていればもっと簡単な手順でできると思いますが、順に確認できそうな手順を以下に。
ワークシートを利用します。
1)フォルダAのファイルリストをA列に、フォルダBのファイルリストをC列に作成
Dir関数等でリストを作成できると思います。
2)それぞれの重複を調べる。
B列に「A列のファイルと同じものがC列にあるか」を表示
A列の値のあるセル範囲を、RangeAとするなら
RangeA.Offset(,1).FormulaLocal = "=(COUNTIF(C:C,A1)>0)*1"
などとすれば、重複があるファイルの隣に「1」が、ないものは「0」が表示されます。
3)C列のファイルについても同様にD列に表示させておく
以上で準備処理は完了です。
4)A列のファイルを順に処理
4-1)B列が0だったら、ファイルをそのままフォルダCにコピー
4-2)B列が1だったら、ファイルを開き、Bフォルダの同名ファイルの
シートをコピーして保存すれば良いのですが・・
「同じ名前のファイルは同時に開けない」という制限があるので、下記に
示すような方法を取らなければならないと思います。
5)C列のファイルを順に処理
5-1)D列が1だったら(処理済みなので)飛ばす(=なにもしない)
5-2)D列が0だったら、そのままフォルダCにコピー
以上で、完了です。
慣れてくれば、ファイルのリストも一方のフォルダのみを配列に作成しておくだけでよく、ワークシートも使わずに済みますが、上記の手順の方が順にマクロを作成していった際に、結果が見えるのでチェックもしやすいだろうと考えました。
例えば、最初の方であれば
「フォルダAのファイルリストを作成する」マクロをまず目標にして作成することができますよね。
同様にして、ひとつずつを順にクリアしてゆけば、最終目的を達成することが可能と思います。
◇同名のファイル間でシートをコピーする方法について
方法1)
一旦、片方のファイルをフォルダCに(暫定名で)別名保存します。
(暫定名は存在しない名前を指定:例えば temporary999 とか)
名前が変わるので、もう一方のファイルを開きます。
シートをコピーして、元の名前でフォルダCに保存します。
方法2)
一方のファイルを開き、当該シート全体をコピー(.Cells.Copy)
ファイルを閉じ、他方のファイルを開いて、シートにペースト。
他方のファイルをフォルダCに保存。
※ 方法1の場合は、暫定名のファイルが残る可能性がありますので、
処理の最後にファイルが存在すれば、削除しておくのが良いでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
沢山のフォルダにあるファイル...
-
onedriveで同期解除をしたら、...
-
マイドキュメントのフォルダの...
-
フォルダの上書きで、上書きさ...
-
DiskCopyやShrinkWrapについて
-
USB内のフォルダが「ファイル」...
-
入力/出力エラーのファイル以外...
-
ファイルを大量に作りたい
-
一つのフォルダに入るファイル...
-
メールのオートコンプリートリ...
-
PDFを結合すると語句検索できな...
-
copyコマンドについて
-
ファイルのプロパティの属性の...
-
「隠しファイル・フォルダを別...
-
リモートホスト内でのGUIでのフ...
-
異なるファイルに入った複数の...
-
フォルダの上書きコピーってで...
-
HDDのデータを同期
-
メール新着時に「You've Gotta ...
-
PC間のファイルコピーが遅い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onedriveで同期解除をしたら、...
-
沢山のフォルダにあるファイル...
-
マイドキュメントのフォルダの...
-
ファイルのプロパティの属性の...
-
USB内のフォルダが「ファイル」...
-
ファイル名の命名のオススメを...
-
一つのフォルダに入るファイル...
-
動画のサイズと再生時間の長さの件
-
「隠しファイル・フォルダを別...
-
ファイルパスのチルダの意味
-
USBメモリの表示する「残り時間」
-
ファイルをコピーしたとき、も...
-
Batファイルでxcopyを実行する...
-
Macでエイリアスがつくれない。...
-
フォルダの上書きで、上書きさ...
-
1つのフォルダには何個までのフ...
-
macOS10.6 アイコンが再起動時...
-
Windowsファイルエクスプローラ...
-
異なるファイルに入った複数の...
-
viでヤンクした内容をWINDOWS上...
おすすめ情報
VBAは初心者で、これまでもコピーしたものを少しだけいじって使っているのが現状です。
可能であれば、コピーして使えるようなものを教えて頂ければと思います。