プロが教えるわが家の防犯対策術!

こんばんは。

それぞれファイル名が異なる100つ程あるエクセルファイルを開いて、それぞれのシートの内容を所定のエクセルに貼り付ける作業を自動化したいと思います。
貼り付け元のファイルが数個程であれば記録マクロで簡単にマクロを作れたのですが、100つとなると記録マクロで作るのが厳しいのですが、うまいやり方はありますか?
カードを書くことはできませんので、記録マクロのみ使用する方法で教えていただけると助かります。

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

  • Dirのあとになぜカッコがないのかがわかりません。

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/08/07 23:31

A 回答 (7件)

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


Const folder As String = "D:\goo\data2"
は、転記元のファイルを格納しているフォルダ名です。
あなたの環境に合わせて適切に設定してください。
-----------------------------------------------
Option Explicit
Public Sub 個人名シート転記()
Const folder As String = "D:\goo\data2"
Dim fname As String '転記元ファイル名
Dim wbm As Workbook '転記元ブック
Dim sname As String 'シート名
fname = Dir(folder & "\*.xlsx")
Do While fname <> ""
Set wbm = Workbooks.Open(folder & "\" & fname)
sname = wbm.Worksheets(1).Name
ThisWorkbook.Worksheets(sname).Range("A1:C3").Value = wbm.Worksheets(1).Range("A1:C3").Value
wbm.Close
fname = Dir()
Loop
MsgBox ("完了")
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました。

お礼日時:2022/08/08 22:10

補足ありがとうございました。


>ファイル1のシート名は個人名、貼り付け先のファイルに同じく個人名のシートがあり、そこに貼り付けるイメージです。

ファイル1のシート名は、個人名ということですが、
シートの数は、1つでしょうか。それとも、2つ以上ありますか。
2つ以上ある場合、どれが、個人名かは、マクロでの判断は難しくなります。
例えば、"山田","総務","Sheet1"の3つのシートがあった場合、
人間なら"山田"が個人名のシートであると判断できますが、マクロではできません。
個人名のシートがある位置がわかっていれば、対応可能ですが、
個人名のシート位置はきまってないでしょうか。
(例 一番左側に個人名のシートがある。もしくは、左から2番目に個人名のシートがある。等です)
    • good
    • 0
この回答へのお礼

ありがとうございます。シートの数は一枚だけです。

お礼日時:2022/08/08 16:43

補足要求です。


>ファイル1を開いて、そのファイルのA1〜C10セルを、所定のファイルのファイル1シートのA1〜C3に貼り付け、ファイル2のA1〜C3を開いて、所定のファイルのファイル2シートのA1〜C3セルに貼り付ける

ということですが、
1.「ファイル1のA1:C3のセルを所定のファイルのファイル1シートのA1:C3に貼り付け」
が正しいと理解しましたが、いかがでしょうか。(A1:C10ではなくA1:C3)

2.ファイル1のシート名は、どのようになっていますか。
シート名が判らないと、どのシートのA1:C3を貼り付けるのかがわかりません。

3.貼り付け先ののシート名は、以下の理解であってますか。
ファイル1のファイル名=ABCD.xlsx とすると
貼り付け先のシート名=ABCD

4.貼り付け先のシートは、100個のファイルの数分、全て、そろっている前提であってますか。

5.貼り付け先のブックにマクロを記憶すると理解していますが、間違いないでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。

1は誤植でした。
A1〜C3です。

2、3ですが、
ファイル1のシート名は個人名、貼り付け先のファイルに同じく個人名のシートがあり、そこに貼り付けるイメージです。
貼り付け先のファイル名は、まとめファイルという名前です。

4,5はご認識の通りです。

お礼日時:2022/08/08 12:51

Dirの件。


URLの記事は読んでみました?

ファイル = Dir(パス & "*.xlsx")
  'パス配下拡張子「.xlsx」の最初のファイル名を返す
ファイル = Dir
  '引数なしDir …引数を引き継いだ次のファイル名を返す

と。Dirはこれだけで、次のファイル名、次のファイル名と自動で内容が変わっていくんです。

ファイル = Dir
Msgbox ファイル
ファイル = Dir
Msgbox ファイル

みたいに、MsgBoxを加えて複数書いてみて下さい。
Msgboxで、[ファイル]に入ったDirの内容が変化してることがわかると思います。
Dirそのものには何も足したり引いたりしていないのに…
個人的にDirは気持ち悪い関数だなって思ってます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

リンク先を読んでいたのですが、
'引数なしDir …引数を引き継いだ次のファイル名を返す
というところは見落としていました。
理解しました!

お礼日時:2022/08/08 07:56

コメント拝見しました。


「コピー元」と「貼り付け先」でペアの関係があるのですね。

その場合は、予めペアの繋がりをまとめた情報を用意する必要出てきます。
参照用のシートを用意するか、マクロ内に書き込むか。

ペアでファイル名に共通した法則、要素があれば・・・例えば
コピー元  abcde★.xlsx
貼り付け先 abcde▲▲.xlsx
みたいな感じであれば…
フォルダ内のファイルを開く。→abcde★.xlsx
開いたファイル名から貼り付け先のファイル名を作る。
abcde★.xlsx から★を除いて▲▲をつける →abcde▲▲.xlsx
abcde▲▲.xlsxを開く。
abcde★.xlsx からコピーして abcde▲▲.xlsx に貼り付ける。
開いたファイルを閉じる。
ペアの数だけ繰り返し。

…みたいな流れになるかなぁ。
複雑になってくるので、マクロ作成に慣れてないと厳しいです。
この回答への補足あり
    • good
    • 0
この回答へのお礼

何度もありがとうございます。

記録マクロをベースに、少しコードを変更するレベルでしかマクロを使えないので難しそうですね。
ちょっと勉強してみます。

2回目のご回答のところで、わからないところがあるのですが、

ファイル = Dir

というのはどのような意味なのでしょうか?
それ以外のところは解読できたのですが、ここだけ意味がわかりません。

お礼日時:2022/08/07 23:30

例えば、作業の対象になるファイルが1つのフォルダにまとめてあるなら、



100個のファイル名をわざわざ書き並べなくても、
「このフォルダの中の全ファイルに対して実行して」
というような書き方ができます。

Sub ブックをすべて開いて処理()
  Dim パス As String, ファイル As String
  パス = "D:¥test¥"
  ファイル = Dir(パス & "*.xlsx")
  Do While ファイル <> ""
    Workbooks.Open パス & ファイル

     【実行する処理内容をココの間に書き込む】

    Workbooks(ファイル).Close
    ファイル = Dir
  Loop
End Sub

(こちらより引用、編集)
   ↓
フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》|Excel|ヘルプの森 https://www.helpforest.com/excel/emv_sample/ex10 …
    • good
    • 0
この回答へのお礼

ありがとうございます。
元ファイルは同じフォルダに入れています。
明日トライしてみようと思いますが、今回想定しているのは、ファイル1を開いて、そのファイルのA1〜C10セルを、所定のファイルのファイル1シートのA1〜C3に貼り付け、ファイル2のA1〜C3を開いて、所定のファイルのファイル2シートのA1〜C3セルに貼り付ける…という操作です。そのような場合でも、このやり方でできますか?

お礼日時:2022/08/07 22:05

記録マクロだけで実現するなら、


ファイルを開いて貼り付けて閉じて・・・
を100ファイルに対して実行するしか無いです。

マクロを直接編集できるのであれば、
1パターンだけ記録して、そのパタ―ンに
ファイル名を順に流し込むようにするだけで済むんだけどね。
    • good
    • 1
この回答へのお礼

ありがとうございます。

簡単なコード編集であれば、記録マクロに限定しなくても構わないのですが、ファイル名を順に流し込むというのは簡単にカードが書けますか?

お礼日時:2022/08/07 21:31

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