プロが教えるわが家の防犯対策術!

エクセルで各ブックの集計値を他のブックに集計したいのですが、フォルダを移動させると数値が違ってしまう。どうすればいつ見ても正しい集計値を見れるか教えて下さい。

現在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

A 回答 (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以外はないものとしています。
他のブックがある場合はチェックコードを追加しなければいけません。

なお、各ブックのシート名や合計範囲が違うのでちょと面倒そうですが、
最初の質問のようにそれらが同じだとより簡単なコードになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/02/05 15:18

再度の登場、onlyromです。



お気づきとは思いますが、回答2にちょこっとミスあり。


>(2)ブック3のSheet1のA~H列の最終行【に】

最後の【に】は間違いで次のようになります。

(2)ブック3のSheet1のA~H列の最終行【の次の行から】

以上。
 
    • good
    • 0

>同じブックのシート間の集計ではないため、毎回数値が変わってしまい、その都度計算式を(=ブック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


再度いいますが、実際の処理の流れ(どこのセルをどのように等)をより具体的に提示したほうがいいでしょう。
 

この回答への補足

更に追加して・・・すみません(^^;)
(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の合計を総合計したものを表示させることはできますか?

補足に書いていいのかわかりませんが・・・よろしくお願いします。<(_ _)>

補足日時:2009/01/28 17:29
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/28 17:28

>フォルダを移動させると数値が違ってしまう


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

この回答への補足

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

補足日時:2009/01/28 14:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!