gooポイントが当たる質問投稿キャンペーン>>

Excelの複数ファイルの内容を一つのファイルに集計する方法について教えてください。
各支店からの報告を集計したいのですが、同一フォームのファイル(約100ファイル)で報告されるデータを一つのファイルに集計したいと思っています。
A支店ファイルのsheet1、B支店ファイルのsheet1、・・・・を、合計ファイルのsheet1に集約したいのです。(フォームは同じで、内容は数値のみです。)
いい方法がある方、お教えください。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

フォルダー内の全エクセルファイルのデータを1シートにまとめるVBAのコードはWeb検索すれば、種々みつかります。

下記はコードの若干の解説もあって良いと思います。
http://hpcgi1.nifty.com/kenzo30/b_cbbs/cbbs.cgi? …
問題は、「同一フォーム」の内容ですね。
データ中に各支店名が含まれていなければ、抽出時に付与しないと訳が分からなくなるし、
変に凝った様式だと単純にコピーするだけではうまくいかないし。
    • good
    • 5

VBAの操作です。



この手の操作は頻度高いです。
質問に挙げている要件について、そのままネット検索してテクニックを
見つけてください。

例)
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv20002.h …
ファイルダイアログを表示してブックを開く
フォルダ中のファイル名をシートに書く
http://www.asahi-net.or.jp/~ef2o-inue/menu/menu0 …
指定したフォルダ内にある複数のExcelワークブックを順次開いて処理を行なう


・フォルダ選択ダイアログを表示
・複数ファイルを選ぶ
・順次シート1を取りこむ
ここまではよくある話です。

1ブックに100シート分収めてから、最後に計算し集約する

対象ブックを開いたときに随時値を取得して、集計セルへ(を100回繰り返す)
どちらかになります。

2ファイル分をマクロの記録で実施して、
それが100ファイル分になるよう考えてみる、
でも良いです。
    • good
    • 4

>いい方法がある方、お教えください。


といっても質問者の技量次第だよ。1つのメルクマールはVBAの経験があるかだろう。何もそれらしき言及が無いので、経験がないのだろう。
そもそもエクセルで100ファイルもに分かれさせるのは、無茶(大げさにはシステム企画が不適当)なんだ。利用ツールとしてエクセルは向いてない。別シート、別ブックになると扱いが格段に難しくなる。
エクセルしか出来ないから使った場合が多いかもしれないが、そういう場合だと、エクセルそのものの知識も狭い場合が多い。
ーー
(1)ソフトを探す
VBAでも出来なければ
http://www.vector.co.jp/soft/winnt/business/se40 …
に似たソフトが無いか探すほか無い。
(2)VBAがやれるなら、ファイルを開いて、集計して、閉じるを繰り返せば、時間はかかるが、出来る理屈。VBA熟達者でもコード完成やテストに時間がかかると予想。
その際100のファイルはどうして判別するのか書いてないのが、そもそもプログラム蘇陽経験が無い証拠。
・同一フォルダに集る.xlsファイル全て
・ファイル名の先頭からなど共通文字列があり分別できる
などだと良いが
同一フォルダのファイルを1つづつ掴む方法のコードはWEBにあふれ、本コーナーでも質問頻出。
人力で、とりあえず同一フォルダに集め、無関係のファイルはそこから排除が適当と思う。
ーー
エクセルの「統合」機能はシート間が多いが、ブック間で出来るようだから
(注)http://www.eurus.dti.ne.jp/~yoneyama/Excel/tougo …
のブック間のデータの統合
WEB(Googleで)でも「エクセル 統合」で照会し、読んで勉強すること。
しかし100ファイルを操作するのは面倒だ。
1つのマクロの記録を取り、100回繰り返し用に改良する方法もあるかもしれない。
    • good
    • 7

ありがちな状況ですけどみなさんどうしてるんでしょうかね。



その後の管理から考えて、まずひとつのファイルにするべきかと思います。
合計用ファイルを開いておいて、A支店のファイルを開きます。
A支店のsheet1のタブを右クリックして「コピーまたは移動」だったかな、移動でかまわないと思いますが、移動先は上のプルダウンメニューから合計用ファイルを選びます。
つづいてB支店のファイルを開いて、、、続けます。
たぶんメールで来るんでしょうから、開いて確認してシートを移動して合計用ファイルを保存する、という作業が繰り返されます。
各支店のファイルは保存する必要はないでしょう。

あとは#1の方が回答した串刺し計算を行います。

もっとシンプルな方法もあるのかなあと思いつつ。
    • good
    • 2

ANo.1です。


同じブックにあるシートと勘違いしました。
回答は無視して下さい。
    • good
    • 2

例えば


各支店のA1の集計を行いたい時は
オートSUMボタンをクリック
そのままA支店のシートを開いてA1をクリック
Shiftを押しながら最後のシートを開いて
Enterで合計がでます。

=SUM(A支店:B支店!A1)のよになります。
    • good
    • 4

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q複数の同じフォーマットのファイルを新しいブックで一つのシートにまとめる方法

仕事で、各部署から送られてきた、同じフォーマットのファイル(シート1にのみデータ有)が50個近くあります。
それを新しいブックで一つのシートにまとめなくてはいけません。
地道にコピペするのは時間がかかるのでマクロで処理を行いたいと思います。
マクロでの処理方法ご存知の方、処理方法の載っているサイトをご存知の方、もしくはマクロより簡単な方法がありましたら教えてください。

あと、逆に一つのシートをいくつかのファイルに振り分けていく方法もご存知でしたら教えて下さい。
よろしくお願いします。

Aベストアンサー

すみません。質問を勘違いしていました。
>新しいブックで一つのシートにまとめなくてはいけません
でしたね。
Sub Sample1()
Dim buf As String, i As Long
Dim j
buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
Do While buf <> ""
Workbooks.Open Worksheets("Sheet1").Range("A1").Value & "\" & buf
Sheets("Sheet1").Range("A1:J1000").Copy
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Workbooks(buf).Activate
Application.CutCopyMode = False
Workbooks(buf).Close SaveChanges:=False
buf = Dir()
Loop
End Sub
で試してみてください。使い方などは
http://oshiete1.goo.ne.jp/qa4225063.html
を参照してみてください。同じ質問があったので気がつきました。

すみません。質問を勘違いしていました。
>新しいブックで一つのシートにまとめなくてはいけません
でしたね。
Sub Sample1()
Dim buf As String, i As Long
Dim j
buf = Dir(Sheets("Sheet1").Range("A1").Value & "\*.xls")
Do While buf <> ""
Workbooks.Open Worksheets("Sheet1").Range("A1").Value & "\" & buf
Sheets("Sheet1").Range("A1:J1000").Copy
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Workbooks(buf).Activate
Application.CutCop...続きを読む

Q複数のエクセルファイルからデータ抽出とまとめる方法について。

500のエクセルファイルがあり、それぞれのエクセルデータのA2からF2までのデータのをまとめた一覧表(1行目は、1枚目のエクセルファイルのA2-F2、2行目は2枚目のエクセルファイルの・・・、という感じでです)のを、新しいエクセルファイルもしくはテキストなどにでも手早く作れる方法をご存知の方、ご教授ください。コピペでやっていますが嫌になってしまいました。。マクロも触っては見たのですが、2枚目のエクセルファイルを2行目に、3枚目のエクセルファイルを3行目になどの方法の解決は思いつかず、挫折しました。よろしくお願いいたします

Aベストアンサー

対象のフォルダをcドライブの「sample」とした場合で回答します。
新規エクセルブックのシート名タブを右クリックし「コードの表示」
右側のエディタエリアに下記コードを貼り付け、実行して下さい。
G列にファイル名が入るようになっています。不要であれば
Cells(rIdx, 7).Value = fName
を削除して下さい。


Sub getA_F()
Const myPath As String = "c:\sample\"
Dim rIdx As Long
Dim fName As String
fName = Dir(myPath & "*.xls")
Do Until fName = ""
Workbooks.Open Filename:=myPath & fName
rIdx = rIdx + 1
Me.Range(Cells(rIdx, 1), Cells(rIdx, 6)).Value = ActiveSheet.Range("A2:F2").Value
Cells(rIdx, 7).Value = fName
Windows(fName).Close
fName = Dir
Loop
End Sub

対象のフォルダをcドライブの「sample」とした場合で回答します。
新規エクセルブックのシート名タブを右クリックし「コードの表示」
右側のエディタエリアに下記コードを貼り付け、実行して下さい。
G列にファイル名が入るようになっています。不要であれば
Cells(rIdx, 7).Value = fName
を削除して下さい。


Sub getA_F()
Const myPath As String = "c:\sample\"
Dim rIdx As Long
Dim fName As String
fName = Dir(myPath & "*.xls")
Do Until fName = ""
Workbooks.Open ...続きを読む

Qエクセルで多数のシートをまとめる方法

エクセルで10以上あるシートを一発でひとつにまとめる方法はあるでしょうか?

コピー&ペーストを繰り返すしかないのでしょうか…

仕事で明日やらなければならないので、
お分かりになる方、是非教えてください!

Aベストアンサー

まぁ既出回答にもあるように,10数回程度コピー貼り付けすることで,どうという作業ではないとは思います。

さておき。
ご利用のエクセルのバージョンが不明ですが,ご利用のOfficeのバージョンによっては

1.ワードを起動する
2.挿入のファイルからエクセルブックを指定する
3.添付図のようなダイアログが表示されたらラッキー成功です,ブック全体を指定して挿入する
4.Ctrl+Aで全体を選び,コピーして,エクセルの新しいシートに貼り付ける

と一発でできます。
添付図のようにならなかったときは,出来ません。

QEXCELで複数のブックの特定のセルの合計を求める方法は?

EXCELの関数,数式で質問です。
<例題>異なる様式の表(数値)で構成された3つのシート(a,b,c)をもつブックが,同じ型式で50個(50ブック)ある。各ブックの特定のシートの特定の数値セル(1~50ブックのbシートのA5セル)の合計を求める数式を示しなさい。
※この回答の1つは「=1ブックのbのA5+2ブックのbのA5+3ブックのbのA5+4ブックのbのA5+…+50ブックのbのA5」だと思うのです。しかし,いちいち各ブックの対象シート(b)の対象セル(A5)をクリックして数式を完成させるのは大変です。さらに,求めたい特定の数値セルが「bのA5」だけでなく「aのB3」や「cのR6」など,3つ,4つと増えるとすると,同様の数式を入力するのに大変な労力を要します。何か簡単な集計方法(関数,数式)はあるでしょうか。ややこしい質問ですみません。どうぞ御教示ください。

Aベストアンサー

#1です。
VBAは関数ではありません。言って見ればプログラムです。

下記はサンプルです。
実行する場合はテスト環境で行って下さい。

1)集計元ブック(1ブック.xls や 2ブック.xls 等)を適当なフォルダにまとめて置きます。(例 C:\Test)
2)新規ブックを開き、メニューのツール-マクロ-VisualBasicEditorでVBE画面を起動します。
3)VBE画面のメニューで挿入-標準モジュールに下記をコピペします。
4)VBE画面を閉じます。
5)上記と同じフォルダに適当な名前で保存します。
6)メニューのツール-マクロで Test を実行します。

これで集計元ブックのシートBのA5にある値を順次転記していきます。

Sub Test()
Dim MyName As String, wb As Workbook

On Error Resume Next
MyName = Dir(ThisWorkbook.Path & "\*.xls", vbNormal)
Do While MyName <> ""
  If UCase(MyName) <> UCase(ThisWorkbook.Name) Then
   Application.ScreenUpdating = False
   Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & MyName)
   ThisWorkbook.Worksheets("Sheet1").Range("A65536").End(xlUp) _
     .Offset(1, 0).Value = wb.Worksheets("b").Range("A5").Value
   wb.Close
  End If
  MyName = Dir
Loop
Application.ScreenUpdating = True

End Sub

#1です。
VBAは関数ではありません。言って見ればプログラムです。

下記はサンプルです。
実行する場合はテスト環境で行って下さい。

1)集計元ブック(1ブック.xls や 2ブック.xls 等)を適当なフォルダにまとめて置きます。(例 C:\Test)
2)新規ブックを開き、メニューのツール-マクロ-VisualBasicEditorでVBE画面を起動します。
3)VBE画面のメニューで挿入-標準モジュールに下記をコピペします。
4)VBE画面を閉じます。
5)上記と同じフォルダに適当な名前で保存します。
6)メニュ...続きを読む

Q複数エクセルから特定シートの特定行だけを別シートに抽出するマクロ

エクセルブックが160ほどあります。
それらは全て同じ作りで、シートが2つづつ存在しています。
その2シート目(シート名”集約”シート)にある特定のセル(A2からT2)だけを
別のエクセルに集めて一覧にしたいです。

色々とやってみてネット検索もしてみたのですが、うまくいかないので
どなたか教えていただけませんでしょうか。

Aベストアンサー

こんな感じで、どうでしょう。
MyPathで指定したフォルダ内の .xlsx ファイルを対象に一覧化します。
一覧は、A列にファイル名、B列以降に各ブック中の”集約”シートのA2~T2が表示されます。
ただし、”集約”シートが無い場合は、ちょっとおかしな動作をします。おかしな動作については、お楽しみ!!(元のファイルが壊れることは無いので、安心して実行してみて下さい)

Sub sample()
Dim MyPath As String
Dim MyFile As String
Dim I As Long
MyPath = "C:\教えてGoo\"
MyFile = "*.xlsx"
MyFile = Dir(MyPath & MyFile)
Do While MyFile <> ""
I = I + 1
Cells(I, "A") = MyFile
Range(Cells(I, "B"), Cells(I, "U")).Formula = "='" & MyPath & "[" & MyFile & "]Sheet1'!A2"
MyFile = Dir
Loop
End Sub

こんな感じで、どうでしょう。
MyPathで指定したフォルダ内の .xlsx ファイルを対象に一覧化します。
一覧は、A列にファイル名、B列以降に各ブック中の”集約”シートのA2~T2が表示されます。
ただし、”集約”シートが無い場合は、ちょっとおかしな動作をします。おかしな動作については、お楽しみ!!(元のファイルが壊れることは無いので、安心して実行してみて下さい)

Sub sample()
Dim MyPath As String
Dim MyFile As String
Dim I As Long
MyPath = "C:\教えてGoo\"
MyFile = "*.xlsx"...続きを読む

Q複数のブックからデータを転記するマクロについて

こんにちは。
VBAの素人なのでネットや本などで自分なりに調べましたが、
どうにも解決できないので、ご教示いただけませんでしょうか。

複数のブックにある同一セル番地にある
データを別のブックにまとめたいのですが、
ブック数が500程度あり、マクロでうまくできないか悩んでいます。

 (1)転記元ブックを開く。
 (2)転記元データをコピーする。
 (3)転記先ファイルのセルに貼り付ける。
 (4)転記元ブックを閉じる。
の繰り返しだと思うのですが、(2)ができず困っています。
ちなみに、500のブックとまとめるブックも同じフォルダにあります。

具体的には、転記元ブックは以下のような形で、A列に様々な温度のデータが縦に並んでいます。
   A列  
1行  温度 
2行  27 ←ここのみ抽出したい
3行  28
4行  30

それぞれのブックのA2番地の温度データのみを抽出し、転記先ブックのA2からA500までまとめたい。

組んだマクロは以下です。
------------------------------
Sub 特定フォルダ内ブックを並べ替えて転記()
Dim myDir As String, myName As String, myBook As Workbook
Dim motodata As Range, sakidata As Range

  '集計用のブックがあるフォルダ名を指定
myDir = "D:\VBA練習"
myName = Dir(myDir & "\" & "*.xls")

  Do While myName <> ""
  '↓転記先の最新レコード位置を取得する
  Set sakidata = Range("A65536").End(xlUp).Offset(1)
  '↓(1)指定した名前のブックを開いて変数に格納する
 Set myBook = Workbooks.Open(Filename:=myDir & "\" & myName)
  '↓(2)転記元を取得する
  Set motodata = myBook.Range("A2")
     '↓(3)転記先に貼り付ける
  motodata.Copy sakidata
  '↓(4)開いたブックを閉じる
  myBook.Close
 myName = Dir()
 Loop
End Sub
------------------------------
mybookというキーワードを使用して、A2セルデータをコピーする構文をご教示いただけませんでしょうか。

以上、長々となってしまいましたが、何卒アドバイスの程お願いいたします。

こんにちは。
VBAの素人なのでネットや本などで自分なりに調べましたが、
どうにも解決できないので、ご教示いただけませんでしょうか。

複数のブックにある同一セル番地にある
データを別のブックにまとめたいのですが、
ブック数が500程度あり、マクロでうまくできないか悩んでいます。

 (1)転記元ブックを開く。
 (2)転記元データをコピーする。
 (3)転記先ファイルのセルに貼り付ける。
 (4)転記元ブックを閉じる。
の繰り返しだと思うのですが、(2)ができず困っています。
ちなみに、500...続きを読む

Aベストアンサー

複数のBookやSheetの処理をする場合
#1さんも言われてるように、Book、Sheetを省略すると
現在アクティブになっている、Book、Sheetを指定したことになってしまいます
一応、修正してみましたが
Sheet名が不明なため"ActiveSheet"としていますが
複数Sheetがある場合、希望どおりの結果を得られない可能性があるので
"workheet("処理対象シート名")"に変更した方がよいと思います


Sub 特定フォルダ内ブックを並べ替えて転記()
Dim myDir As String, myName As String, myBook As Workbook
Dim motodata As Range, sakidata As Range

Dim 転記先 As Worksheet, 転記元 As Worksheet

Set 転記先 = ThisWorkbook.ActiveSheet

'集計用のブックがあるフォルダ名を指定
myDir = "D:\VBA練習"
myName = Dir(myDir & "\" & "*.xls")
Do While myName <> ""
'↓転記先の最新レコード位置を取得する
Set sakidata = 転記先.Range("A65536").End(xlUp).Offset(1)
'↓(1)指定した名前のブックを開いて変数に格納する
Set myBook = Workbooks.Open(Filename:=myDir & "\" & myName)
'↓(2)転記元を取得する

Set 転記元 = myBook.ActiveSheet

Set motodata = 転記元.Range("A2")
'↓(3)転記先に貼り付ける
motodata.Copy sakidata
'↓(4)開いたブックを閉じる
myBook.Close
myName = Dir()
Loop
End Sub

参考まで

複数のBookやSheetの処理をする場合
#1さんも言われてるように、Book、Sheetを省略すると
現在アクティブになっている、Book、Sheetを指定したことになってしまいます
一応、修正してみましたが
Sheet名が不明なため"ActiveSheet"としていますが
複数Sheetがある場合、希望どおりの結果を得られない可能性があるので
"workheet("処理対象シート名")"に変更した方がよいと思います


Sub 特定フォルダ内ブックを並べ替えて転記()
Dim myDir As String, myName As String, myBook As Workbook
Dim moto...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q複数のエクセルファイルとシートからデータ抽出したい

すみませんが教えてください!
複数のエクセルファイルがあり、それぞれに複数のシートがあります。
(ファイルによってシート数は異なります)
そのすべてのファイル/シートから、C列の最後の行のデータを抽出し、集計ファイルに書き出したいのです。
書き出しのフォーマットは3セル使用して、ファイル名、シート名、データとしたいです。
すみませんが、よろしくお願いいたします。

Aベストアンサー

集計用のブックを用意する
Sheet1のA1、B1、C1セルに「ファイル名」「シート名」「データ」と記入しておく
集計ブックを、あなたの「複数のエクセルファイル」が放り込んであるフォルダに一緒に保存しておく


改めて集計ブックを開く
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける

sub macro1()
 dim myPath as string
 dim myFile as string
 dim w as worksheet

 mypath = thisworkbook.path & "\"
 myfile = dir(mypath & "*.xls*")
 application.screenupdating = false
 do until myfile = ""
  if myfile <> thisworkbook.name then
   workbooks.open mypath & myfile
   for each w in workbooks(myfile).worksheets
   with thisworkbook.worksheets("Sheet1").range("A65536").end(xlup).offset(1)
    .value = myfile
    .offset(0, 1) = w.name
    .offset(0, 2).value = w.cells(w.rows.count, "C").end(xlup).value
   end with
   next
   workbooks(myfile).close false
  end if
  myfile = dir()
 loop
 application.screenupdating = true
end sub

ファイルメニューから終了してエクセルに戻る
ALT+F8を押してマクロを実行する。

集計用のブックを用意する
Sheet1のA1、B1、C1セルに「ファイル名」「シート名」「データ」と記入しておく
集計ブックを、あなたの「複数のエクセルファイル」が放り込んであるフォルダに一緒に保存しておく


改めて集計ブックを開く
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける

sub macro1()
 dim myPath as string
 dim myFile as string
 dim w as worksheet

 mypath = thisworkbook.path & "\"
 myfile = dir(mypath & "...続きを読む

Qエクセル フォルダ内の.xlsファイルの集計

エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。

作業としては
あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む
という形です。

その際に、各シートの特定セルの内容により出力するセルを変えたいと思っています。

実際には、
AAA.xlsというファイルの3枚目以降のシートで、L2セルに「B」と記述があれば別ブックのB3セルに、「C」と記載されていれば別ブックのC3セルに、それぞれD4セルの数値を集計する。
次にBBB.xlsというファイルに関しても同様に集計し、その結果はB4セルとC4セルに出力する
これを当該フォルダに入っているファイル全てについて行う
※L2セルには「B」「C」以外の文字は入りません。

こういった作業ができればと思っています。

お時間のある方がおられましたら、ご教授いただけますでしょうか。
参考になるサイトなどがありましたら、アドレスだけでも御教えいただけると幸いです。


質問の仕方が悪いようでしたら、ご指摘いただければ再度説明させていただきます。拙劣な説明ですがどうかよろしくお願いします。

エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。

作業としては
あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む
という形です。

その際に...続きを読む

Aベストアンサー

集計するんじゃなくて,単純に転記して並べていくだけですね。

つぎのようなごく基本的なマクロを組み合わせて,応用をしていくだけの作業です。
1.ブックを次々調べて巡回するdir関数の使い方
2.見つけたブックを開く方法
3.開いたブックから値を引き出す方法
4.転記先を適切に設定する方法
などの手段について,VBAのヘルプやヘルプに書いてある使用例などを見ながら理解してください。


手順:
集計ブックを用意し,AAA.xlsやBBB.xlsが入れてあるフォルダに一緒に放り込んでおく
集計ブックに次のマクロを用意して実行する


sub macro1()
 dim myPath as string
 dim myFile as string
 dim i as long
 dim w as workbook
 dim n as long
 dim s as variant
 
’準備
 thisworkbook.worksheets(1).range("B:C").clearcontents
 thisworkbook.worksheets(1).range("B2:C2") = array("B","C")
 mypath = thisworkbook.path & "\"
 n = 3

’そこにあるブックを調べる
 myfile = dir(mypath & "*.xls*")
 do until myfile = ""
  if myfile <> thisworkbook.name then

 ’開いて調査する
  set w = workbooks.open(filename:=mypath & myfile)
  for i = 3 to w.worksheets.count
   s = w.worksheets(i).range("L2")
   if s="B" or s="C" then
    thisworkbook.worksheets(1).cells(n, s) = w.worksheets(i).range("D4").value
    n = n + 1
   end if
  next i
  w.close savechanges:=false
  end if
  myfile = dir()
 loop
end sub

集計するんじゃなくて,単純に転記して並べていくだけですね。

つぎのようなごく基本的なマクロを組み合わせて,応用をしていくだけの作業です。
1.ブックを次々調べて巡回するdir関数の使い方
2.見つけたブックを開く方法
3.開いたブックから値を引き出す方法
4.転記先を適切に設定する方法
などの手段について,VBAのヘルプやヘルプに書いてある使用例などを見ながら理解してください。


手順:
集計ブックを用意し,AAA.xlsやBBB.xlsが入れてあるフォルダに一緒に放り込んでおく
集計ブックに次のマ...続きを読む

Qフォルダ内の全てのBookに同じ処理を繰り返す

フォルダ内にエクセルファイルが約3,000個あります。
この全てのBookに同じ処理をしたいのですが、マクロで繰り返す方法がわからないので教えて下さい。
処理をする内容は簡単なもので、マクロで作りました。

・ 各Bookには1つのシートしか存在せず、シート名は重要ではないので全て「Sheet1」になっています。
・ 各Bookのデータの配置や表形式は同じです。
・ レコードの行数がBookによって異なります。

処理の内容をマクロで作るところまではできましたが、知識がないためタイムアウトです。

ご教示宜しくお願い致します。

Aベストアンサー

だいたいこんな流れで。

sub macro1()
 dim myPath as string
 dim myFile as string

 mypath = "C:\test\"

’指定フォルダのブックを順繰り拾う
 myfile = dir(mypath & "*.xls*")
 do until myfile = ""

 ’ブックを開いて処理を行い保存して閉じる
  workbooks.open mypath & myfile
  activesheet.range("A1") = "DONE"
  activeworkbook.close true

  myfile = dir()
 loop
end sub


必要に応じて
・画面の表示を抑制する
・再計算を手動にする
といった手管を追加して高速化を図ります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング