No.3ベストアンサー
- 回答日時:
No.1です。
>(例えば集計対象をC3セル以下以右)
というコトですので、すべてのSheetの配置が↓の画像のようになった場合のコードに変更してみました。
若干のコメントも加えていますので、参考にしてみてください。
Sub Sample2()
Dim i As Long, j As Long, k As Long
Dim lastRow As Long, lastCol As Long
Dim c As Range, wS As Worksheet
With Worksheets("集計元")
lastRow = .Cells(Rows.Count, "C").End(xlUp).Row '「集計元」シートのC列最終行取得//
lastCol = .Cells(2, Columns.Count).End(xlToLeft).Column '「集計元」シートの2行目の最終列取得//
Range(.Cells(3, "D"), .Cells(lastRow, lastCol)).ClearContents '「集計元」シートのデータを一旦消去//
For k = 2 To Worksheets.Count '2番目Sheet~最終Sheetまで//
Set wS = Worksheets(k) '○番目シートの・・・//
For i = 3 To wS.Cells(Rows.Count, "C").End(xlUp).Row 'C列3行目~最終行まで//
'「集計元」シートのC列に○番目SheetのC列,i行目のデータがあるか検索//
Set c = .Range("C:C").Find(what:=Format(wS.Cells(i, "C"), "000"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then 'C列データがあれば・・・//
For j = 4 To lastCol 'D列~最終列まで//
With .Cells(c.Row, j) '「集計元」シートの見つかった行の j 列の値は//
.Value = .Value + wS.Cells(i, j) 'そのセルの値+○番目Sheetの i 行、j 列の値をプラス//
End With
Next j '次の列へ//
End If
Next i '次の行へ//
Next k '次のシートへ//
End With
MsgBox "完了"
End Sub
※ 配置が変わらなければ
行・列ともいくら増えても構いません。m(_ _)m
No.2
- 回答日時:
複数のシートをまとめてから集計したほうがいいと思います。
No.1
- 回答日時:
こんばんは!
「集計元」シートはシート見出しの一番左側にあり、
「任意のシート」はシート見出しの2番目以降にあるとします。
尚、各シートとも↓の「集計元」シートのような配置になっているという前提です。
(行はバラバラでもよいが、すべてのSheetで列項目の順はそろっている!)
標準モジュールです。
Sub Sample1()
Dim i As Long, j As Long, k As Long
Dim lastRow As Long, lastCol As Long
Dim c As Range, wS As Worksheet
With Worksheets("集計元")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
Range(.Cells(2, "B"), .Cells(lastRow, lastCol)).ClearContents
For k = 2 To Worksheets.Count
Set wS = Worksheets(k)
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
Set c = .Range("A:A").Find(what:=Format(wS.Cells(i, "A"), "000"), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
For j = 2 To lastCol
With .Cells(c.Row, j)
.Value = .Value + wS.Cells(i, j)
End With
Next j
End If
Next i
Next k
End With
MsgBox "完了"
End Sub
※ 画像を拝見すると
おそらくA列の表示形式は「文字列」になっていると思われますが
表示形式のユーザー定義で 000 でも対応できると思います。m(_ _)m
この回答へのお礼
お礼日時:2017/03/09 20:49
モジュールをありがとうございます!
こちらをアレンジして使用したいと思います。
アレンジをする際に、行もしくは列の項目部分が一行増える(例えば集計対象をC3セル以下以右)際にはどこを修正すればよいでしょうか。
教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) Excelで任意の塗りつぶし色の数字を集計する方法はありますか?関数を使ってできる方法があれば教えて 3 2022/11/18 16:57
- Excel(エクセル) Excel シート複数 金額日計表と日付 簡単にシートコピーしたら前日の残高と日付を変更させたい 1 2022/07/15 22:10
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- その他(パソコン・スマホ・電化製品) EXCELのSUMPRODUCT関数について 2 2022/09/21 17:30
- その他(プログラミング・Web制作) Pythonでexcelのvbaを作成、実行する方法について Pythonで表の自動集計プログラムを 3 2022/07/09 09:58
- Excel(エクセル) Excelの複数ファイルの複数行を別ファイル1つのシートにVBA、マクロで集約する方法 5 2022/09/13 06:30
- Excel(エクセル) Excel関数教えてください!! Excelで勤怠集計をしているのですが、部署別に雇用形態ごとの月間 2 2022/10/21 23:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで繰り返しコピーしながら下...
-
ExcelのVlookup関数の制限について
-
オートフィルタ使用時にCOUNTIF...
-
文字の色も参照 VLOOKUP
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセルで横並びの複数データ...
-
エクセルVBA 行追加時に自...
-
エクセルの列の限界は255列以上...
-
エクセルの保護で、列の表示や...
-
VLOOKアップ関数の結果の...
-
【VBA】ピボットテーブルを既存...
-
excel 複数のシートの同じ場所...
-
Excelでの並べ替えを全シートま...
-
エクセル マクロ 標準モジュー...
-
エクセル関数に詳しい方、教え...
-
Excel VBA ピボットテーブルに...
-
SUMPRODUCTにて別シートのデー...
-
スプレッドシートでindexとIMPO...
-
シートをまたぐ条件付き書式に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
Excel の複数シートの列幅を同...
-
【VBA】シート名と見出しが一致...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
【条件付き書式】countifsで複...
-
VLOOKアップ関数の結果の...
-
Excel VBA ピボットテーブルに...
-
エクセル マクロ 標準モジュー...
-
Excelで、ファイル名、シート名...
-
エクセルで、チェックボックス...
-
【VBA】複数のシートの指定した...
-
エクセルVBAで、ある文字を含ん...
-
スプレッドシートでindexとIMPO...
-
SUMPRODUCTにて別シートのデー...
おすすめ情報