人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルについて教えてください。
1?n個のエクセルファイルの記入データー(データーは○、×、???など定型)
の個数を串刺し集計する方法をご存知の方いらっしゃいましたら教えてください。
エクセル2003使用。
各エクセルファイルのファイル名は異なるがシート名は同じで、データーが入力されているセルも同じ。

以上よろしくお願いします。

●質問者: dongwu
●カテゴリ:コンピュータ インターネット
✍キーワード:エクセル セル データ ファイル 入力
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●100ポイント

できなくはないのですがリンクが発生するので、ファイルの変更や追加に対して柔軟に対応できず、

問題が発生する可能性もあります。

対象となるファイル数は多いのでしょうか?


あまり多い数でなければ、対象となるシートを一つのファイルに集め、ブック内で串刺し集計しては

どうでしょうか。

下記はあるフォルダ内にあるシートを一つのブックに集めるマクロです。

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程度です。


2 ● SALINGER
●50ポイント

ファイル数が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さん

詳細に有難うございます。

私の説明不足ですみません。

○と×のような違うデーターは、データー毎に集計したいのです。

あとアンケートのような形で、複数の項目があり、その項目ごとに

データーの集計を行いたいのです。


3 ● Mook
●200ポイント ベストアンサー

では、データを集計するデータです。

集計シートを用意し、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さん、何度も細かく説明していただき有難うございます。

私の説明不足ですみません。

アンケートのような形で、複数の項目があり、その項目ごとに

データーの集計を行いたいのです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ