エクセルの質問です。


200個あるファイルの特定セルの足し算をしなければならなくなりました。

ファイル名は数字で001~200まである状態です。

何か便利な方法はありますか?
マクロなどありましたらよろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:2007/02/15 23:51:53
  • 終了:2007/02/17 00:59:06

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/02/16 00:46:03

ポイント100pt

マクロでの実行例です。

実際のファイルに合わせて、赤い部分を変更して実行してみてください。

'// 集計するデータ位置
Const dataCell = "A1"
'//データファイルのフォルダ 最後は \
Const dataFilePath = "C:\Data\"

Sub sumBooks()
    Dim filePath As String
    Dim sumWS As Worksheet
    '// 集計用シートを先頭に追加
    With ThisWorkbook
        Set sumWS = .Worksheets.Add(before:=.Worksheets(1))
    End With
    For i = 1 To 3
        filePath = dataFilePath & Right("000" & i, 3) & ".xls"
        With Workbooks.Open(filePath)
    '// B列にファイル名を表示
            sumWS.Cells(i, "B").Value = .Name
    '// C列にデータを表示
            sumWS.Cells(i, "C").Value = .Worksheets(1).Range(dataCell).Value
            .Close
        End With
    Next
    '// A1 に 合計を表示
    sumWS.Range("A1").Formula = "=SUM(C1:C200)"
End Sub

マクロを動かしたファイルの先頭シートに結果が集計されます。

id:junta

Mookさん回答ありがとうございます。

何とかなりそうです。

ちなみにファイル名が違った場合(漢字のファイル名+数字、ランダムな数字)どこをいじればよいのかも教えていただけると幸いです。

2007/02/16 01:35:33

その他の回答(1件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/02/16 00:46:03ここでベストアンサー

ポイント100pt

マクロでの実行例です。

実際のファイルに合わせて、赤い部分を変更して実行してみてください。

'// 集計するデータ位置
Const dataCell = "A1"
'//データファイルのフォルダ 最後は \
Const dataFilePath = "C:\Data\"

Sub sumBooks()
    Dim filePath As String
    Dim sumWS As Worksheet
    '// 集計用シートを先頭に追加
    With ThisWorkbook
        Set sumWS = .Worksheets.Add(before:=.Worksheets(1))
    End With
    For i = 1 To 3
        filePath = dataFilePath & Right("000" & i, 3) & ".xls"
        With Workbooks.Open(filePath)
    '// B列にファイル名を表示
            sumWS.Cells(i, "B").Value = .Name
    '// C列にデータを表示
            sumWS.Cells(i, "C").Value = .Worksheets(1).Range(dataCell).Value
            .Close
        End With
    Next
    '// A1 に 合計を表示
    sumWS.Range("A1").Formula = "=SUM(C1:C200)"
End Sub

マクロを動かしたファイルの先頭シートに結果が集計されます。

id:junta

Mookさん回答ありがとうございます。

何とかなりそうです。

ちなみにファイル名が違った場合(漢字のファイル名+数字、ランダムな数字)どこをいじればよいのかも教えていただけると幸いです。

2007/02/16 01:35:33
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/02/16 02:01:39

先の回答は、3つまでのファイルで試したので、For の範囲が3までになっていました。

失礼しました。


ファイル名が数値だと書かれていたので、ファイル名を数値としたのですが、

いろいろな名前だとすると難しいですね。

指定したフォルダに、あるファイルを全部集計するという処理でよいなら、下記のようでどうでしょうか。

'// 集計するデータ位置
Const dataCell = "A1"
'//データファイルのフォルダ
Const dataFilePath = "C:\Data\"

Sub sumBooks()
    Dim filePath As String
    Dim sumWS As Worksheet
    '// 集計用シートを先頭に追加
    With ThisWorkbook
        Set sumWS = .Worksheets.Add(before:=.Worksheets(1))
    End With
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim file As Object
    
    Dim index As Long
    index = 1
    '// フォルダ下のすべてのファイルを処理
    For Each file In fso.GetFolder(dataFilePath).Files
        filePath = dataFilePath & file.Name
        With Workbooks.Open(filePath)
    '// B列にファイル名を表示
            sumWS.Cells(index, "B").Value = file.Name
    '// C列にデータを表示
            sumWS.Cells(index, "C").Value = .Worksheets(1).Range(dataCell).Value
            .Close
        End With
        index = index + 1
    Next
    '// A1 に 合計を表示
    sumWS.Range("A1").Formula = "=SUM(C1:C200)"
End Sub

回答回数が2回になりましたので、コメントを有効にしていただければ、不明点はコメントで回答いたします。

id:junta

たびたび回答ありがとうございます。

非常に参考になりました。

2007/02/17 00:57:57
  • id:Mook
    最初の回答の、ファイル名を生成している部分は、
      For i = 1 To 3 ' 200 の間違い
        filePath = dataFilePath & Right("000" & i, 3) & ".xls"
    の部分です(見易さのために、全角スペースを使用しています)。
    ファイル名が、まちまちであるなら2回目の回答か、ファイル名を何らかの方法(セルや配列によって指定)する必要があるかと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません