1~n個のエクセルファイルの記入データー(データーは○、×、①~⑤など定型)
の個数を串刺し集計する方法をご存知の方いらっしゃいましたら教えてください。
エクセル2003使用。
各エクセルファイルのファイル名は異なるがシート名は同じで、データーが入力されているセルも同じ。
以上よろしくお願いします。
では、データを集計するデータです。
集計シートを用意し、1行目にB1から集計対象のセルの位置を下記のように書いてください。
A | B | C | D | ... | |
---|---|---|---|---|---|
1 | C3 | D5 | D7 | E4 | ... |
A列にはファイル名が入ります。各ファイルの指定シートの1行目で指定した値を集計しますが
それを使って集計してはどうでしょうか。
Const FolderPath = "C:\Data" Const SheetName = "集計" Sub getData() Dim dstWS As Worksheet Set dstWS = ActiveSheet Dim srcWB As Workbook Dim srcWS As Worksheet Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ff As Object Dim tr As Long tr = 2 Dim c As Long For Each ff In fso.getFolder(FolderPath).Files If UCase(fso.GetExtensionName(ff.Path)) = "XLS" Then Set srcWB = Workbooks.Open(ff.Path) Set srcWS = srcWB.Worksheets(SheetName) dstWS.Cells(tr, "A").Value = Replace(LCase(ff.Name), ".xls", "") c = 2 Do While dstWS.Cells(1, c).Value <> "" dstWS.Cells(tr, c).Value = srcWB.Worksheets(SheetName).Range(dstWS.Cells(1, c).Value).Value c = c + 1 Loop srcWB.Close tr = tr + 1 End If Next End Sub
できなくはないのですがリンクが発生するので、ファイルの変更や追加に対して柔軟に対応できず、
問題が発生する可能性もあります。
対象となるファイル数は多いのでしょうか?
あまり多い数でなければ、対象となるシートを一つのファイルに集め、ブック内で串刺し集計しては
どうでしょうか。
下記はあるフォルダ内にあるシートを一つのブックに集めるマクロです。
Const FolderPath = "C:\Data" Const SheetName = "集計" Sub getSheets() Dim dstWB As Workbook Set dstWB = Workbooks.Add() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ff As Object For Each ff In fso.getFolder(FolderPath).Files If UCase(fso.GetExtensionName(ff.Path)) = "XLS" Then Set wb = Workbooks.Open(ff.Path) wb.Worksheets(SheetName).Copy before:=dstWB.Worksheets(1) wb.Close dstWB.Worksheets(1).Name = Replace(LCase(ff.Name), ".xls", "") End If Next End Sub
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1110478...
Mookさん、ご回答いただきありがとうございます。
ファイル数は300程度です。
ファイル数が300ということで、1つのブックにまとめるのは現実的ではないようですので、
VBAで個々にカウントするコードにしてみました。
セルごとに指定したデータの数をカウントして表示しています。
(そのため同じセルの位置に○と×のように違うデータがあっても合計しています。)
Excelのあるフォルダのパス、シート名、データの種類を実際の値に変更して実行してみてください。
Sub CountData() 'Excelファイルのあるフォルダを指定 Const FolderPath = "C:\Documents and Settings\hogehoge\デスクトップ\test" '集計するシート名を指定 Const SheetName = "Sheet1" Dim i As Integer Dim str As String Dim wb As Workbook Dim r As Range Dim fso As Object Dim ff As Object Dim myData As Variant Dim sh As Worksheet Set sh = ActiveSheet 'カウントするデータを種類を指定してください myData = Array("○", "×", "①", "②", "③", "④", "⑤") Set fso = CreateObject("Scripting.FileSystemObject") For Each ff In fso.getFolder(FolderPath).Files If UCase(fso.GetExtensionName(ff.Path)) = "XLS" Then Set wb = Workbooks.Open(ff.Path) For Each r In wb.Worksheets(SheetName).UsedRange For i = 0 To UBound(myData) If r.Value = myData(i) Then sh.Range(r.Address).Value = sh.Range(r.Address).Value + 1 End If Next i Next wb.Close End If Next End Sub
SALINGERさん
詳細に有難うございます。
私の説明不足ですみません。
○と×のような違うデーターは、データー毎に集計したいのです。
あとアンケートのような形で、複数の項目があり、その項目ごとに
データーの集計を行いたいのです。
では、データを集計するデータです。
集計シートを用意し、1行目にB1から集計対象のセルの位置を下記のように書いてください。
A | B | C | D | ... | |
---|---|---|---|---|---|
1 | C3 | D5 | D7 | E4 | ... |
A列にはファイル名が入ります。各ファイルの指定シートの1行目で指定した値を集計しますが
それを使って集計してはどうでしょうか。
Const FolderPath = "C:\Data" Const SheetName = "集計" Sub getData() Dim dstWS As Worksheet Set dstWS = ActiveSheet Dim srcWB As Workbook Dim srcWS As Worksheet Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ff As Object Dim tr As Long tr = 2 Dim c As Long For Each ff In fso.getFolder(FolderPath).Files If UCase(fso.GetExtensionName(ff.Path)) = "XLS" Then Set srcWB = Workbooks.Open(ff.Path) Set srcWS = srcWB.Worksheets(SheetName) dstWS.Cells(tr, "A").Value = Replace(LCase(ff.Name), ".xls", "") c = 2 Do While dstWS.Cells(1, c).Value <> "" dstWS.Cells(tr, c).Value = srcWB.Worksheets(SheetName).Range(dstWS.Cells(1, c).Value).Value c = c + 1 Loop srcWB.Close tr = tr + 1 End If Next End Sub
MooKさん、何度も細かく説明していただき有難うございます。
私の説明不足ですみません。
アンケートのような形で、複数の項目があり、その項目ごとに
データーの集計を行いたいのです。
MooKさん、何度も細かく説明していただき有難うございます。
私の説明不足ですみません。
アンケートのような形で、複数の項目があり、その項目ごとに
データーの集計を行いたいのです。