ギリギリ行けるお一人様のライン

別のフォルダ(DドライブのフォルダAとフォルダB)にそれぞれ同じ名前のファイルが500ずつあります。フォルダAのファイルにはそれぞれの名前のシート1、フォルダBのファイルにはそれぞれの名前のシート2があります。
マクロでフォルダCにシート1とシート2のあるブックを作ることはできませんか?

フォルダA ブック1(シート1)、ブック2(シート1)‥
フォルダB ブック1(シート2)、ブック2(シート2)‥

フォルダC ブック1(シート1.シート2)、ブック2(シート1、シート2)‥

としたいのです。申し訳ありません!助けて下さい!

質問者からの補足コメント

  • つらい・・・

    1)拡張子はxlsxです。
    2.3ファイル名は全角文字です
    [フォルダAには全てのファイルのかあり、Bのフォルダは一部たりないものもあります、その場合には1に在るシートだけてCにいれたいです)
    456はその通りです。簡単にできるのでしようか?

    追加 そんなんでつくったフォルダC内のファイル全てのシートの並び順番をかえるマクロはありますか?
    上司の命令で、同様のフォルダC、フォルダDをつくらなければならなそうで、またシートの並びも変更ありそうなのです。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/03/15 00:34
  • へこむわー

    見捨てずに聞いて頂けてとてもありがたいです。

    最初はフォルダAとBを合体して、シート1と2のあるブックをつくるだけですんだのですが、その合体ブックの最初に「説明」シート、シート1.2の後ろに「添付」シートをつけるように言われてしまいました。この説明と添付はすべてのブックに共通の内容になっています。

    シートの並びかえを相談したのは、シート1、2を合体し、「説明」「添付」を合体したら、「説明」「シート1」「シート2」「添付」と並び替えなければならないのかなと思いききました。
    説明と添付はすべてのブックに共通なんです。うまいやり方はありますか?

    心配です。意味わかっていただけたでしょうか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/03/15 23:55
  • うーん・・・

    作業の内容をわかりやすくまとめていただきありがとうございました。
    その通りです!理解いただけて感動です。

    今日も1日中ネットで調べながら格闘していましたが、どうにもうまくいかずぐったりでした。
    頭の中ではいろいろ考えてみているのですが、ネットで例を調べながら進めていますが、エラーの言葉の意味からわからないので、時間ばかりすぎてしまいます。
    助けていただけると本当にありがたいです。

    No.4の回答に寄せられた補足コメントです。 補足日時:2018/03/16 22:55

A 回答 (5件)

以下のマクロを標準モジュールに登録してください。


Const FolderA As String = "d:\goo\excel\goo360A"・・・フォルダA
Const FolderB As String = "d:\goo\excel\goo360B"・・・フォルダB
Const FolderC As String = "d:\goo\excel\goo360C"・・・フォルダC
については、あなたの環境に適切に合わせてください。
---------------------------------------------------
Option Explicit

Const FolderA As String = "d:\goo\excel\goo360A"
Const FolderB As String = "d:\goo\excel\goo360B"
Const FolderC As String = "d:\goo\excel\goo360C"
Const Bs1 As String = "説明"
Const Bs2 As String = "添付"
Const Sh1 As String = "シート1"
Const Sh2 As String = "シート2"
Public Sub シート統合()
Dim flist() As String
Dim fname As String
Dim bname As String
Dim count As Long
Dim i As Long
fname = Dir(FolderA & "\*.xlsx")
'フォルダAの全ファイルを取得
count = 0
Do While fname <> ""
ReDim Preserve flist(count)
flist(count) = fname
count = count + 1
fname = Dir()
Loop
If count = 0 Then
MsgBox (FolderA & "内に該当ブックがありません")
Exit Sub
End If
'取得したファイルを1件ずつ処理
count = 0
For i = 0 To UBound(flist)
bname = flist(i)
If Dir(FolderB & "\" & bname) <> "" Then
Call MakeBook(bname)
count = count + 1
End If
Next
MsgBox (count & "件のブックの作成完了")
End Sub

Private Sub MakeBook(ByVal targetName As String)
Dim bname As String
'FolderAのブックをオープン
Workbooks.Open Filename:=FolderA & "\" & targetName
'新規ブック追加
Workbooks.Add (xlWBATWorksheet)
'新規ブック名を取得
bname = Workbooks(Workbooks.count).Name
'説明をコピー
ThisWorkbook.Worksheets(Bs1).Copy after:=Workbooks(bname).Worksheets(Workbooks(bname).Worksheets.count)
'シート1をコピーしてクローズ
Workbooks(targetName).Worksheets(Sh1).Copy after:=Workbooks(bname).Worksheets(Workbooks(bname).Worksheets.count)
Workbooks(targetName).Close savechanges:=False
'FolderBのブックをオープン
Workbooks.Open Filename:=FolderB & "\" & targetName
'シート2をコピーしてクローズ
Workbooks(targetName).Worksheets(Sh2).Copy after:=Workbooks(bname).Worksheets(Workbooks(bname).Worksheets.count)
Workbooks(targetName).Close savechanges:=False
'添付をコピー
ThisWorkbook.Worksheets(Bs2).Copy after:=Workbooks(bname).Worksheets(Workbooks(bname).Worksheets.count)
'余分なSheet1を削除
Application.DisplayAlerts = False
Workbooks(bname).Sheets("Sheet1").Delete
Application.DisplayAlerts = True
'フォルダーCへそのファイル名で保存
Workbooks(bname).Close savechanges:=True, Filename:=FolderC & "\" & targetName
End Sub
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます。
Optionscriptとか、private subなんてどうやって使うのか? お仕事でこのようなことをされているのでしょうか?どうやって勉強していけばいいのでしょうか?
読んでいると意味がわかるのですが、自分ではかけません。
本当にできるようになりたいです。

本当にありがとう子ぞいます!

お礼日時:2018/03/17 22:33

>シートの並びかえを相談したのは、シート1、2を合体し、「説明」「添付」を合体したら、「説明」「シート1」「シート2」「添付」と並び替えなければならないのかなと思いききました。



それでしたら、フォルダCにブックを作成するときに、最初から
「説明」「シート1」「シート2」「添付」の順に作成すればよいです。
この「説明」と「添付」はブック共通なので、これを予めどこに格納しておくかということになりますが、これらは
マクロのあるブック内に格納しておくという前提で良いでしょうか。
要件を整理すると以下のようになります。

1.フォルダAにある全てのブック(拡張子.xlsx)には、”シート1”が存在する。
2.フォルダBにある全てのブック(拡張子.xlsx)には、”シート2”が存在する。
3.マクロ(これから作成予定のマクロ)をもつブックには、”説明”、”添付”のシートが存在する。
4.フォルダAおよびフォルダB内に共に存在するブックを元に新規ブックを作成し、同じブック名でフォルダCに格納する。
そのブックには、”説明”、”シート1”、”シート2”、”添付”の順にシートを格納する。
5.マクロ実行時、フォルダC内には、一切ブックが存在しないことが前提。
6.マクロ実行時、オープン済みのブックは、そのマクロをもつブックのみであることが前提。

上記の要件で問題なければ、マクロの提供は可能です。
この回答への補足あり
    • good
    • 0

No2です。


補足ありがとうございました。
1.フォルダAの全てのファイルには必ず”シート1”が存在する。
2.フォルダBの全てのファイルには必ず”シート2”が存在する。
3.フォルダAとフォルダBの両方に存在する同じファイル名のもののみが処理対象となる。
上記で、間違いないでしょうか。

追加の件ですが、
>そんなんでつくったフォルダC内のファイル全てのシートの並び順番をかえるマクロはありますか?
フォルダCのブック内のシート1、シート2をシート2、シート1にしたいということでしょうか?
それなら、最初から、シート2、シート1の順で作成してはいかがでしょうか?

>上司の命令で、同様のフォルダC、フォルダDをつくらなければならなそうで、またシートの並びも変更ありそうなのです。
よく、意味が分かりません。
もっと、具体的に説明していただけませんでしょうか?
この回答への補足あり
    • good
    • 0

補足要求です。


1)ブックの拡張子はxlsxで良いですか。
2)シート1の実際のシート名は”シート1”で良いですか。(全て全角文字、"1"も全角)
もし、異なるなら、正確なシート名を提示ください。(全角半角も含めて正確に提示してください)
3)シート2の実際のシート名は”シート2”で良いですか。(全て全角文字、"2"も全角)
もし、異なるなら、正確なシート名を提示ください。(全角半角も含めて正確に提示してください)
4)フォルダA内の全てのブック(拡張子がxlsx)を処理しますが宜しいですか。
5)フォルダBは、フォルダAから取得したファイル名に合致するものを全て処理します。
6)マクロ実行時、フォルダC内には、一切ブックが存在しないという前提で良いですか。
この回答への補足あり
    • good
    • 1

VBAを使用しても、同じ名前のファイルを同時に開くことはできませんので、下記の流れでやってみてはいかがですか?


①新規のブックを開く
②フォルダAのブック1を開いて、①のブックにシート1をコピーし、ブック1を閉じる
③フォルダBのブック1を開いて、①のブックにシート2をコピーし、ブック1を閉じる
④①のブックを名前を付けて保存。
    • good
    • 1
この回答へのお礼

考えかたを具体的に整理してくださりありかとうございます!
実際にマクロをくむとましたらどのようになるのでしょう。
本当に初心者でまったくわからなくて。
どうかどうかよろしくおねかいします。

お礼日時:2018/03/11 00:23

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報