• ベストアンサー

Excel マクロで複数ブックのデータを一つのブックにまとめたい

マクロ初心者です。 フォーマットの同じ複数のブックのセルをコピーし、 新しいブックに羅列したいのですが、 ブック数が多く、手作業では効率が悪く、困っています。 例えば・・・Book001.xls、Book002.xls、二つのブックがあります BooK001.xls  ABCD 1  * 2  * 3  * 4  * Book002.xls  ABCD 1  + 2  + 3  + 4  + これを、新しいブック(All.xls)に  ABCD 1 *+ 2 *+ 3 *+ 4 *+ といったように、コピーしたいのですが、マクロ初心者のため、お手上げ状態です。 条件は、 ・フォルダにBookXXX.xls(XXXは001~の連続した番号)という名のブックが入っている ・BookXXX.xlsは全て同じフォーマット マクロの構文はもちろん、設定の仕方も教えていただけないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 #1さんのおっしゃっている内容を、そのまま、マクロに移植してしまえばよいのでは? でも、最初、マクロが分からないと、ちょっと手間取るかもしれませんね。 コードを書いてみました。 標準モジュールに貼り付けてください。 Alt +  F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、 Alt + Q で、画面を閉じます。 --------------------------------------------- Sub GetData() Dim myPath As String Dim i As Long Dim FName As String Dim myAddress As String myAddress = "Sheet1'!RC1" '取得する相手のブックのアドレス myPath = Application.DefaultFilePath & "\" 'パス(現在はデフォルト) If Right$(myPath, 1) <> "\" Then myPath = myPath & "\" For i = 1 To 100 '100回を繰り返す    'ブック名  FName = "Book" & Format$(i, "000") & ".xls"    'ブックが存在しているかチェック  If Dir(myPath & FName) <> "" Then   '数式の貼り付け   FName = "='" & myPath & "[" & FName & "]" & myAddress     '500行まで   Range("A1:A500").Offset(, i - 1).FormulaLocal = FName   '数式を値に変更   Range("A1:A500").Offset(, i - 1).Value = _     Range("A1:A500").Offset(, i - 1).Value  End If Next i End Sub

noname#129662
質問者

お礼

回答ありがとうございます。 注釈が分かりやすく、設定が簡単にできました。 ALL.xlsというブックを作成し、そのSheet1セルA1を選択して、 書いてある通りにマクロを作成しました。 ついでに、Microsoft Excel ObjectフォルダのThisWorkbookに Private Sub Workbook_Open() Call GetData End Sub 上のコードを付け足して、ブックを開いたときにマクロが実行されるように設定しました。 試しに、test用のブックを作って実行してみましたが、何も出てきません。 やはり、マクロの知識がほとんど無いと、難しいのでしょうか?

noname#129662
質問者

補足

パスというのは、 例えば、Cドライブにtestというフォルダを作り、そこに全ブックを保存した場合、 \C\test となるのでしょうか?

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >やはり、マクロの知識がほとんど無いと、難しいのでしょうか? なんと言っていいのかしらね。経験がなくても、すぐに出来る人もいれば、そうでない人もいます。ただ、たとえば、以下のような問題って、教われば簡単な話ですが、教わらないと、自力では、どうにも分からないし、どこの本にも、その出来ない原因が出てこないのです。それは、しょうがないというか、エラーの数だけ、VBAを覚えということだと思います。 ただし、私の考えているのが外れているかもしれません。 >Microsoft Excel ObjectフォルダのThisWorkbookに > >Private Sub Workbook_Open() >Call GetData   '→標準モジュールのGetDataを呼び出せという意味になっています。 >End Sub 「Excelでは、一般のマクロは標準モジュールに書く」というのが決まりです。そうでない場合は、ThisWorkbook.GetData などと書きますが、標準モジュールが良いです。 ThisWorkbookに置くマクロ、Sheet1 モジュールに置くもの、それぞれ、ないようでも、一応、その役割が決まっています。 >例えば、Cドライブにtestというフォルダを作り、そこに全ブックを保存した場合、 > >\C\test これは解決できたかもしれませんが、VBAでは、という限定の話ですが、エクスプローラのアドレスに出てくるものと同じです。 C:\Test ですね。(マクロの中で、C:\Test は、C:\Test\ に変わります。)

noname#129662
質問者

お礼

丁寧にありがとうございます。 マクロは初心者ですが、Java言語などをVisualBasicでやったことがあったので、 引数をウオッチウィンドウで表示させて、なんとかフォルダの場所は解決できました。 おかげさまで、完璧ではありませんが、それなりに満足のいく動きをしてくれるマクロを設定できました。 本当に感謝しています。 仕事上、絶対に必要なスキルではなかったので、マクロは避けてきましたが、やはり覚えておいた方がいいのかも…。 まずは基礎を勉強して、後は経験で覚えるのが良いみたいですね。 初心者の私にでも、分かり易いようにご説明いただき、本当にありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

VBAを使わずとも、他のブックのセル参照機能を利用して、以下ではどうでしょう? 以下、新しいブック(All.xls)とBook001.xlsで行います。 1)All.xlsのセルA1で=を入力して、Book001.xlsのセルA1をクリック   これで=[Book001.xls]Sheet1!$A$1が設定されるはず。   このままだと絶対参照で都合が悪いのでf・4キーを数回おして   =[Book001.xls]Sheet1!$A1にしてください。  2)All.xlsのセルA1をコピーして縦方向にコピーしてください。   All.xlsのセルA2の式が=[Book001.xls]Sheet1!$A2であることを確認しておいてください。 3)次に列Aを列Bにコピーします   All.xlsのセルB1の式が=[Book001.xls]Sheet1!$A1であることを確認しておいてください。 4)列Bの必要なセルを選択して、Ctrl+Hのキー入力(置換)   Book001.xlsをBook002.xlsに置き換えます。   All.xlsのセルB1の式が=[Book002.xls]Sheet1!$A1であることを確認 以下、3と4を繰り返す ただし、ブックが255冊を越えるようだと、横1列になりません。 また、参照だと遅いので、参照式を設定し終えたら、式設定した範囲すべてを「コピー」して「形式を選択して貼り付け>値」で値にした方が良いかも?

noname#129662
質問者

お礼

回答ありがとうございます。 早速試してみました。 ブックを開かずに設定できるのは良いですね。 ただ、ブックが100近くあるので、 この作業を100回繰り返すのと、 ブックを1つ1つ開いてコピー&ペーストするのと、 所要時間の大差があまり無いのでは?と感じました。 せめて、横方向のドラッグでブック名の数字を1ずつ増やせればと思うのですが…。 どういった方法が一番良いのか、模索中です。

関連するQ&A