エクセルで各ブックの集計値を他のブックに集計したいのですが、フォルダを移動させると数値が違ってしまう。どうすればいつ見ても正しい集計値を見れるか教えて下さい。
現在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
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以外はないものとしています。
他のブックがある場合はチェックコードを追加しなければいけません。
なお、各ブックのシート名や合計範囲が違うのでちょと面倒そうですが、
最初の質問のようにそれらが同じだとより簡単なコードになります。
すみません(^_^;)その通りです。
時間を掛けて試みましたが、やはり出来ませんでした。
実行時エラー9
インデックスが有効範囲にありません。
やコンパイルエラー?とか出て・・・
ちょっと難しすぎたようです。(@_@;)
有難うございました。
No.3
- 回答日時:
再度の登場、onlyromです。
お気づきとは思いますが、回答2にちょこっとミスあり。
>(2)ブック3のSheet1のA~H列の最終行【に】
最後の【に】は間違いで次のようになります。
(2)ブック3のSheet1のA~H列の最終行【の次の行から】
以上。
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
再度いいますが、実際の処理の流れ(どこのセルをどのように等)をより具体的に提示したほうがいいでしょう。
この回答への補足
更に追加して・・・すみません(^^;)
(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の合計を総合計したものを表示させることはできますか?
補足に書いていいのかわかりませんが・・・よろしくお願いします。<(_ _)>
ありがとうございます。(#^.^#)
説明ベタで・・・
まさにその通りです!D90の値だけが表示されていて・・・
範囲指定をどこでどういれるのか?判らず困っていました。
とても判り易かったです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBAの参照先のファイル名をセルに書いて代入したい 2 2022/04/04 13:42
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAが途中で止まります
-
VBA シートをコピーする際に Co...
-
VBA コードを実行すると画面が...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBS Bookを閉じるコード
-
ワイルドカード「*」を使うとう...
-
別ブックをダイアログボックス...
-
【VBA】全シートの計算式を全て...
-
VBAで別ブックのシートを指定し...
-
Excelマクロ 該当する値の行番...
-
【ExcelVBA】インデックスが有...
-
vbaでvbaProjectのパスワード解...
-
複数のエクセルブックをひとつ...
-
VBA 実行時エラー 2147024893
-
別ブックの列同士の値が一致し...
-
Excelファイルを開くとき、読み...
-
VBAで複数のブックを開かずに処...
-
エクセルのマクロについて教え...
-
エクセルマクロで、他ブックか...
-
【前回の続き続きです、ご教示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
エクセルVBAが途中で止まります
-
別ブックをダイアログボックス...
-
【ExcelVBA】インデックスが有...
-
ワイルドカード「*」を使うとう...
-
【ExcelVBA】VBA実行でダイアロ...
-
ExcelのVBAです。フォルダ内の...
-
フォルダ内の全てのファイルに...
-
VBA コードを実行すると画面が...
-
VBA 別ブックからコピペしたい...
-
VBAで別ブックのシートを指定し...
-
VBS Bookを閉じるコード
-
vbaでvbaProjectのパスワード解...
-
【VBA】全シートの計算式を全て...
-
VBA シート名が一致した場合の...
-
【ExcelVBA】zip圧縮されたCSV...
-
複数のエクセルブックをひとつ...
-
VBSでExcelのオープン確認
-
VBAで別のブックにシートをコピ...
-
【Excel VBA】書き込み先ブック...
おすすめ情報