- ベストアンサー
各ブックの集計値を総合表示させたい方法とは?
- 各ブックの集計値を他のブックに合計表示させる方法を教えてください。現在1つのファイルの中にある、ブック1・2・3にそれぞれ数値を入力して合計値をブック3の別シートに表示させていますが、同じブックのシート間の集計ではないため、毎回数値が変わってしまいます。
- エクセルのフォルダを移動させると集計値が変わってしまいます。いつ見ても正しい集計値を表示させる方法を教えてください。
- VBAを使用して集計値を表示させる方法を試しましたが、うまくいきませんでした。初心者でもわかる方法を教えてください。
- みんなの回答 (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以外はないものとしています。 他のブックがある場合はチェックコードを追加しなければいけません。 なお、各ブックのシート名や合計範囲が違うのでちょと面倒そうですが、 最初の質問のようにそれらが同じだとより簡単なコードになります。
その他の回答 (3)
- onlyrom
- ベストアンサー率59% (228/384)
再度の登場、onlyromです。 お気づきとは思いますが、回答2にちょこっとミスあり。 >(2)ブック3のSheet1のA~H列の最終行【に】 最後の【に】は間違いで次のようになります。 (2)ブック3のSheet1のA~H列の最終行【の次の行から】 以上。
- onlyrom
- ベストアンサー率59% (228/384)
>同じブックのシート間の集計ではないため、毎回数値が変わってしまい、その都度計算式を(=ブック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 再度いいますが、実際の処理の流れ(どこのセルをどのように等)をより具体的に提示したほうがいいでしょう。
お礼
ありがとうございます。(#^.^#) 説明ベタで・・・ まさにその通りです!D90の値だけが表示されていて・・・ 範囲指定をどこでどういれるのか?判らず困っていました。 とても判り易かったです。
補足
更に追加して・・・すみません(^^;) (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)
>フォルダを移動させると数値が違ってしまう コードどうこうより、これでは特定の記憶領域を毎回検索して対象のブックの場所を読み込ませなければ無理です。移動するのはやめてください。
補足
早速の回答ありがとうございます。 フォルダを移動させなくても、毎回開いて数値を入力すると合計金額がおかしくなるんです。
お礼
すみません(^_^;)その通りです。 時間を掛けて試みましたが、やはり出来ませんでした。 実行時エラー9 インデックスが有効範囲にありません。 やコンパイルエラー?とか出て・・・ ちょっと難しすぎたようです。(@_@;) 有難うございました。