エクセル:各支店の売上げファイルをまとめる

処理をVBAでできませんでしょうか?

デスクトップ上のフォルダに各支店の売り上げファイルがまとめてあります。
ファイル名は半角、全角混じりになっています。
  アキバ支店.xls
  ウエノ支店.xls
  イケブクロ支店.xls
   ・
   ・
   ・
各ファイルの内容は、A列に商品、B列売上金額があり、
商品数は各支店によって異なります。
また、末行には、合計、合計金額があります。
  A列    B列
  商品    金額
  カメラ   11,500
  テレビ   54,800
   ・     ・
   ・     ・
   ・     ・
  合計    xxxxxx

全支店売上ファイルには、A列に各支店名(半角)が
すでに入っています。
B列に各支店の合計金額を転記し、全支店売上ファイルA列に
支店名がないときは、末行にファイル名を半角で入るようにし合計金額を転記したいのです。

  A列     B列
  アキバ支店   xxxxxx
  ウエノ支店   xxxxxx
  イケブクロ支店  xxxxxx
  サッポロ支店  xxxxxx  ←新たに追加

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/12/30 15:48:30
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント500pt

こんなことでしょうか。

Option Explicit

Sub 集計()
    Dim myWS As Worksheet
    Set myWS = ActiveSheet
    
    Dim wsh
    Set wsh = CreateObject("WScript.Shell")

'// ★ デスクトップ上のフォルダ名を設定  : データフォルダ を変更
    Dim dtPath
    dtPath = wsh.SpecialFolders("Desktop") & "\データフォルダ"

    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")

    myWS.Columns("B").Font.ColorIndex = 3

    Dim file
    Dim xName
    Dim dstCell As Range
    Dim srcCell As Range
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    For Each file In fso.GetFolder(dtPath).Files
        If InStr(file.Name, ".xls") > 0 Then
            xName = StrConv(Left(file.Name, InStr(file.Name, ".xls") - 1), vbNarrow)
            Set dstCell = myWS.Columns("A").Find(xName, lookat:=xlWhole)
            If dstCell Is Nothing Then
                Set dstCell = myWS.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
                dstCell.Value = xName
            End If
            With Workbooks.Open(file.Path)
                Set srcCell = .Worksheets(1).Columns("A").Find("合計")
                dstCell.Offset(0, 1).Font.ColorIndex = 1
                If srcCell Is Nothing Then
                    dstCell.Offset(0, 1).Value = "合計がありません"
                Else
                    dstCell.Offset(0, 1).Value = srcCell.Offset(0, 1).Value
                End If
                .Close SaveChanges:=False
            End With
        End If
    Next
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
id:sunfkin22

希望通りにいきました。ありがとうございます。

2013/12/30 15:48:10

コメントはまだありません

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

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

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

回答リクエストを送信したユーザーはいません