各ブックの集計値を総合表示させたい方法とは?

このQ&Aのポイント
  • 各ブックの集計値を他のブックに合計表示させる方法を教えてください。現在1つのファイルの中にある、ブック1・2・3にそれぞれ数値を入力して合計値をブック3の別シートに表示させていますが、同じブックのシート間の集計ではないため、毎回数値が変わってしまいます。
  • エクセルのフォルダを移動させると集計値が変わってしまいます。いつ見ても正しい集計値を表示させる方法を教えてください。
  • VBAを使用して集計値を表示させる方法を試しましたが、うまくいきませんでした。初心者でもわかる方法を教えてください。
回答を見る
  • ベストアンサー

各ブックの集計値を自動的に他のブックに総合計として表示させたい。

エクセルで各ブックの集計値を他のブックに集計したいのですが、フォルダを移動させると数値が違ってしまう。どうすればいつ見ても正しい集計値を見れるか教えて下さい。 現在1つのファイルの中にある、ブック1・2・3にそれぞれ数値を入力して合計値をブック3の別シートに合計表示させていますが、同じブックのシート間の集計ではないため、毎回数値が変わってしまい、その都度計算式を(=ブック1 D60+ブック2 d80+・・・など)を入れなおしています。 間違いなく集計できる方法を教えて下さい。ちなみに全くの初心者なので細かく説明していただけると有難いです。 VBAで検索して下記を見つけ、セル範囲やシート名など変更して試してみましたが、内容がよくわからないため 変な数字がでてきました。初心者にはやはり無理でしょうか? 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("物件").Range("d90:k90").Value    wb.Close   End If   MyName = Dir Loop Application.ScreenUpdating = True End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

またまた登場、onlyromです。 最初の質問と追加の質問は内容が違ってますよね??(^^;;; 追加の質問が本物ですね? >更に追加して・・・すみません(^^;) >(1)ブック1、ブック2、ブック3が同じフォルダーにある >(2)ブック1のシートAのD81~K81に合計 >   ブック2のシートBのD81~K81に合計 >   ブック3のシートCのD90~K90に合計 >(3)ブック3のシートCのD96~K90に(2)のブック1~3の合計を総合計したものを表示させることはできますか? > シートCのD96~K90 は D96~K96 のタイプミスですね。  【最重要確認】 ブック3がThisWorkbookであり、 各シートで計算済みの合計範囲をブック3のシートCに合計して転記するんですね? ということで、サンプル。 '------------------------------------------------- Sub Test() Dim WB As Workbook Dim BookName As String Dim SheetName As String Dim Clm As Integer Dim Gokei(1 To 8) As Double Application.ScreenUpdating = False BookName = Dir(ThisWorkbook.Path & "\*.xls", vbNormal) Do While BookName <> ""  If BookName = ThisWorkbook.Name Then    Set WB = ThisWorkbook  Else    Set WB = Workbooks.Open(ThisWorkbook.Path & "\" & BookName)  End If  Select Case BookName   Case "ブック1.xls"     SheetName = "シートA"     TargetRow = 81   Case "ブック2.xls"     SheetName = "シートB"     TargetRow = 81   Case Else     SheetName = "シートC"     TargetRow = 90  End Select '●合計計算   For Clm = 4 To 11     Gokei(Clm - 3) = Gokei(Clm - 3) + WB.Sheets(SheetName).Cells(TargetRow, Clm).Value   Next Clm  If BookName <> ThisWorkbook.Name Then    WB.Close  End If  BookName = Dir Loop '●合計計算結果を転記  ThisWorkbook.Sheets("シートC").Range("D96:K96").Value = Gokei()  Application.ScreenUpdating = True End Sub '------------------------------------------ (注意点) フォルダーの中には、ブック1,2,3以外はないものとしています。 他のブックがある場合はチェックコードを追加しなければいけません。 なお、各ブックのシート名や合計範囲が違うのでちょと面倒そうですが、 最初の質問のようにそれらが同じだとより簡単なコードになります。

nicnic7145
質問者

お礼

すみません(^_^;)その通りです。 時間を掛けて試みましたが、やはり出来ませんでした。 実行時エラー9 インデックスが有効範囲にありません。 やコンパイルエラー?とか出て・・・ ちょっと難しすぎたようです。(@_@;) 有難うございました。

その他の回答 (3)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.3

再度の登場、onlyromです。 お気づきとは思いますが、回答2にちょこっとミスあり。 >(2)ブック3のSheet1のA~H列の最終行【に】 最後の【に】は間違いで次のようになります。 (2)ブック3のSheet1のA~H列の最終行【の次の行から】 以上。  

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

>同じブックのシート間の集計ではないため、毎回数値が変わってしまい、その都度計算式を(=ブック1 D60+ブック2 d80+・・・など)を入れなおしています 同じブックのシート間の集計でないため毎回数値が変る、という意味が分かりません。 要するに次のようなことですか?(提示のコードも考慮) (1)ブック1、ブック2、ブック3が同じフォルダーにある (2)ブック3のSheet1のA~H列の最終行に    ブック1、ブック2のD90~K90の値を転記する (3)転記されるのは常に、D90~K90の固定範囲である で、あれば提示のコードにはミスがあります。   > .Offset(1, 0).Value = wb.Worksheets("物件").Range("d90:k90").Value これでは、D90の値しか転記されません。以下のように訂正   .Offset(1, 0).Resize(1, 8).Value = wb.Worksheets("物件").Range("D90:K90").Value 再度いいますが、実際の処理の流れ(どこのセルをどのように等)をより具体的に提示したほうがいいでしょう。  

nicnic7145
質問者

お礼

ありがとうございます。(#^.^#) 説明ベタで・・・ まさにその通りです!D90の値だけが表示されていて・・・ 範囲指定をどこでどういれるのか?判らず困っていました。 とても判り易かったです。

nicnic7145
質問者

補足

更に追加して・・・すみません(^^;) (1)ブック1、ブック2、ブック3が同じフォルダーにある (2)ブック1のシートAのD81~K81に合計    ブック2のシートBのD81~K81に合計    ブック3のシートCのD90~K90に合計 (3)ブック3のシートCのD96~K90に(2)のブック1~3の合計を総合計したものを表示させることはできますか? 補足に書いていいのかわかりませんが・・・よろしくお願いします。<(_ _)>

  • tatekenta
  • ベストアンサー率40% (14/35)
回答No.1

>フォルダを移動させると数値が違ってしまう コードどうこうより、これでは特定の記憶領域を毎回検索して対象のブックの場所を読み込ませなければ無理です。移動するのはやめてください。

nicnic7145
質問者

補足

早速の回答ありがとうございます。 フォルダを移動させなくても、毎回開いて数値を入力すると合計金額がおかしくなるんです。

関連するQ&A

  • ブック内に特定名のシートがある場合

    はじめまして、こんにちは。 VBAを最近はじめたばかりの者です。質問が初歩的なもので申し訳ないのですが是非教えてください。 以下を使って、複数ブックの○○というシートから指定セルの内容を抜き出したいと思っています。 ところが、ブックによっては○○というシートが存在しない場合があり、その場合には「インデックスが有効でない」というエラーで動作が止まってしまいます。 ブック内に○○というシートがある場合にのみ動作させるようにするにはどのようにすれば良いのでしょうか。 よろしくお願いします。 Dim wb As Workbook, myRow As Long Dim e As Integer myRow = ThisWorkbook.Worksheets(1).Rows.Count With Application.FileSearch .NewSearch .LookIn = ThisWorkbook.Path .SearchSubFolders = True .FileType = msoFileTypeExcelWorkbooks If .Execute() > 0 Then For i = 1 To .FoundFiles.Count If .FoundFiles(i) <> ThisWorkbook.FullName Then Set wb = Workbooks.Open(.FoundFiles(i), UpdateLinks:=0) Application.ScreenUpdating = False ThisWorkbook.Worksheets(1).Range("A" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F6").Value ThisWorkbook.Worksheets(1).Range("B" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F7").Value ThisWorkbook.Worksheets(1).Range("C" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F8").Value ThisWorkbook.Worksheets(1).Range("D" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("Y6").Value wb.Close False End If Next i Else MsgBox "ファイルがありません。" End If End With End Sub

  • Excel他のブックから情報をコピーする方法

    いつも大変参考にさせていただいております。 Excelで他のブックの値を、今使っているブックにコピーする方法を探しております。 値のみを引く方法として、WEBより以下の方法がわかりました。 Sub TEST1() Workbooks.Open Filename:=ThisWorkbook.Path & "\Book2.xlsx" Dim Wb1, Wb2 Set Wb1 = ThisWorkbook Set Wb2 = Workbooks("Book2.xlsx") Wb2.Worksheets("Sheet1").Range("D7:D9").Copy Wb1.Worksheets("Sheet1").Range("B1") End Sub これを変更して作っていきたいとおもうのですが、最終的にVBAを起動させると コピー元となるExcelをユーザーが自分で選択するようにしたいです。(Excelの画像の挿入で、デバイスから選択 とするようなイメージです) その場合、どのようにしたら成せるでしょうか。 選択するブックは必ず複数シートあり、そのすべてをコピーしたいと思っています。 どなたか分かるかた、ご助力いただけますと助かります。

  • EXCELのVBAを使用してフォルダー内の複数のデーターの集計処理を

    EXCELのVBAを使用してフォルダー内の複数のデーターの集計処理を 行いたいのですが1個目のデーター処理を行った後集計処理を行った後 集計シートを2個目のデーターに移動させたいのですが方法がわかりません。 下記のように集計表(原紙)を複数のデーターにコーピーはできるのですが Private Sub CommandButton1_Click() '集計表作成 Dim MyPath, MyBook, MyName MyPath = ThisWorkbook.Path & "¥" MyBook = ThisWorkbook.Name MyName = Dir(MyPath & "*.xls") Do While MyName <> "" If MyName <> MyBook Then Workbooks.Open Filename:=MyPath & MyName '一番左に集計表を貼り付ける Workbooks(MyBook).Worksheets(1).Copy Before:=Workbooks(MyName).Sheets(1) '"ここで集計処理後 次のBookへ移動" Workbooks(MyName).Save Workbooks(MyName).Close End If MyName = Dir Loop End Sub Copy部分をMoveにするとエラーメッセージがでてしまい 集計したシートを次々と移動させる方法がわかりません。 どのような方法で実行すれば宜しいでしょうか?

  • マクロで複数ブックのデータを一つのブックにコピー

    マクロ超初心者です。 1つのフォルダの中に複数のbook(sheetも複数)があります。 これを新しい1つのbookにまとめたいです。 sheetは「bookを開いた時に表示されるsheetだけ」を新しいbookにまとめたいです。 どなたかの回答に下記マクロがありました。 Sub consolid() Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Worksheets.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く wb.Close '開いたブックを閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件のブックをコピーしましました。" End Sub このマクロを使わせていただき、 これでいける!と思ったのですが、255文字以上のコピーが出来ません。 どのようにすればよいでしょうか?

  • 複数のブックの特定シートを1つのブックにまとめたい

    複数のブックの特定のシートを1つのブックにまとめたいのですが そのマクロは下記のように検索してでてきたのですが Sub test() Dim Fname As String Dim Wbm As Workbook Dim Wbs As Workbook Application.ScreenUpdating = False Set Wbs = ThisWorkbook Fname = Dir(ThisWorkbook.Path & "\*.xlsx*") Do While Fname <> "" If Fname <> ThisWorkbook.Name Then Workbooks.Open ThisWorkbook.Path & "\" & Fname Set Wbm = ActiveWorkbook Wbm.Worksheets("2016.03").Copy after:=Wbs.Worksheets(Wbs.Worksheets.Count) ActiveSheet.Name = Left(Fname, InStr(Fname, ".") - 1) Wbm.Close End If Fname = Dir() Loop Application.ScreenUpdating = True End Sub たとえば、特定のシートというのが毎回変わる場合今回は”2016.03"ですが 次回は”2016.04”という風に変わる時、どこかに入力したセルの値を元にシートを検索してくることなどは可能なのでしょうか? よろしくお願い致します。

  • Excel マクロで複数ブックのデータを一つのブックにまとめる方法

    マクロ初心者です。 1つのフォルダの中に複数のbook(sheetも複数)があります。 これを新しい1つのbookにまとめたいです。 sheetは「bookを開いた時に表示されるsheetだけ」を新しいbookにまとめたいです。 どなたかの回答に下記マクロがありました。 Sub consolid() Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Worksheets.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く wb.Close '開いたブックを閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件のブックをコピーしましました。" End Sub 非常によかったのですが、これですと (1)全てのsheetがコピーされてしまいます。 (2)また、保存しますか?とbookごとに聞いてきます。 上記のマクロのどこを変更すれば、(1)(2)を解決できますでしょうか? (エクセルは2002です) 以上、よろしくお願いします。

  • ブックの統合について

    Sub 集計() Application.ScreenUpdating = False fldPath = ThisWorkbook.Path & "\" fname = Dir(fldPath & "*.xls") Do Until fname = Empty If fname <> ThisWorkbook.Name Then Workbooks.Open fldPath & fname mx = Application.WorksheetFunction.Max(Sheets("1日").Columns(1)) lr = Sheets("1日").Range("B65536").End(xlUp).Row FR = ThisWorkbook.Sheets("1日").Range("B65536").End(xlUp).Row + 1 Sheets("1日").Rows("6:" & lr).Copy Application.DisplayAlerts = False ActiveWorkbook.Close (False) Application.DisplayAlerts = True ThisWorkbook.Sheets("1日").Cells(FR, 1).Select ActiveSheet.Paste Application.CutCopyMode = False End If fname = Dir Loop Application.ScreenUpdating = True End Sub 上記のようにマクロを組みましたが、集計したいシートがたくさんある為 シートごとにマクロを組みなおさなければなりません。 そこで、 集計するシートと集計されるシートのシート名が一緒の時、 わざわざsheets("1日")と書き直さなくても "Activesheetと同じシート名"のようなマクロの組み方は出来るのでしょうか。

  • 別ブックにして保存する際、関数が設定してあるためデータが参照できなくなります。

    別ブックにあるシート(元シート)をコピーしていますが、そのシートは他のシートから関数を入れて参照しているため、別ブックにするとデータがおかしくなります。すべて値にして別ブックにするにはどのようにしたらいいでしょうか? いま書いているコードは次のように書いています。 Sub 保存() Application.ScreenUpdating = False Worksheets("元").Copy ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" _ & Range("A1").Text & "-" & Range("F2").Text & "・" & Range("J2").Text & ".xls" Application.ScreenUpdating = True End Sub

  • VBA コピペの途中でエラーになってしまいます。

    以前、質問させて頂き、マクロでしたい事の記述方法を教えて頂きました。 ご教示頂いたマクロ記述に更に手を加えて、下記のように記述しました。 したいことは、一つのフォルダにExcel Bookが120ほどあり、その中のマクロを組んだ集計用Book以外のBookから同じ名前のシート”結果”をコピーして、コピペされたシートは1、2、3・・という名前にして集計用Bookに値貼り付けをする。。というものです。 ところが、下記のマクロを実行するとシート名25までコピペされるのですが、途中で ”問題が発生したため MICROSOFT OFFICE EXCELを 終了します。・・・・・” とエラーになってしまいます。 このエラーを回避して120ほどあるシートをマクロのある集計Bookへコピペするには、どのようにしたら良いでしょうか? ご存知の方がみえたら、ご教示下さい。宜しくお願いいたします。 <マクロの記述> Sub macro() Const Aフォルダ As String = "C:\Documents and Settings\Bic\デスクトップ\Aフォルダ\" Dim FileCounter As Integer Dim myName As String myName = Dir(Aフォルダ & "*.xls") FileCounter = 0 Application.ScreenUpdating = False Do While myName <> "" If myName <> ThisWorkbook.Name Then Application.DisplayAlerts = False Workbooks.Open Aフォルダ & myName On Error Resume Next Workbooks(myName).Worksheets("結果").Copy After:=ThisWorkbook.Worksheets(2 + FileCounter) If Err.Number = 0 Then ActiveSheet.Range("A1:L35").Copy ActiveSheet.Range("A1:L35").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False FileCounter = FileCounter + 1 ActiveSheet.Name = FileCounter End If On Error GoTo 0 Workbooks(myName).Close End If myName = Dir Application.DisplayAlerts = True Loop Application.ScreenUpdating = True End Sub

  • Excel マクロで複数ブックのデータを一つのブックにまとめる方法

    マクロ初心者です。 1つのフォルダの中に複数のbook(sheetも複数)があります。 これを新しい1つのbookにまとめたいです。 回答に下記マクロがありました。 Sub consolid() Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Worksheets.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く wb.Close '開いたブックを閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件のブックをコピーしましました。" End Sub これで使用した所マクロを実行する度に何度も同じシートが コピーされてしまいます。 できれば同じ名前のシートは上書きにしてマクロを何度も使用できるように【各BOOKは毎週更新されて私のフォルダに入ってきます】したいのですが そのような事は可能なのでしょうか? どなたか分かる方教えてください。お願い致します。