電子書籍の厳選無料作品が豊富!

複数シートのデータ集計に関しての質問です。

シートが2015年5月から2016年6月まであり
そのそれぞれに

番号 名前 数値
番号 名前 数値




といった形で1000人ほどのデータがあります。

各シートの名前の並びは必ずしも一緒ではないため
名前、もしくは番号を参照し、数値を全て合算するという処理を行いたいです。
合算したシートの並びは2016年6月のシートの並びにしたいと考えています。

VBA、もしくは数式で処理は可能でしょうか。

ご回答の程、よろしくお願いいたします。

A 回答 (3件)

こんばんは!



横からお邪魔します。
「集計」をしたいSheetはシート見出しの一番左側にあり、
2015年5月~2016年6月のシートはシート見出しの2番目以降にあるという前提です。
同姓同名があったとしても、おそらく「番号」の重複はないと思いますので
番号で検索しています。
元データは各シートともA~D列にあるとします。

標準モジュールにしてください。

Sub Sample1()
Dim k As Long, lastRow As Long, wS As Worksheet
Application.ScreenUpdating = False
With Worksheets(1)
.Cells.Clear
Worksheets(Worksheets.Count).Range("A:D").Copy .Range("A1")
For k = 2 To Worksheets.Count
Set wS = Worksheets(k)
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS.Cells(2, "A"), wS.Cells(lastRow, "D")).Copy .Cells(Rows.Count, "F").End(xlUp).Offset(1)
Next k
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
With Range(.Cells(2, "D"), .Cells(lastRow, "D"))
.Formula = "=SUMIF(G:G,B2,I:I)"
.Value = .Value
End With
.Range("F:I").Clear
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

※ 「集計」を行うSheetのF~I列を作業用の列として使っていますので
E列以降にはデータがないとします。m(_ _)m
    • good
    • 0
この回答へのお礼

返事がとても遅くなってしまい申し訳ありません。
ご指示通り実行したところ思った処理ができました。
これから内容を噛み砕いて理解していくるつもりです。

今回はありがとうございました、ベストアンサーにさせていただきます。

お礼日時:2016/12/05 12:01

んーと、「2016年6月」シートの名前または番号の順で集計を行いたいという事でしょうか。


それさえなければ、普通にシートごとに「番号」で並べ替えをして「串刺し計算」すればよいだけのような気がするんですけど、それではダメなんですか?
※番号に抜けが無いことが条件です。

集計のシートに
 =SUM('2015年5月:2016年6月'!C1)
のようにすると、
「2015年5月」シートから「2016年6月」シートまでの間の「C1セル」の合計を表示することができます。


・・・余談・・・
この方法は合計したいシートの範囲を簡単に変更することができます。
新規にシートを2つ作成し、それぞれ「ここから」「ここまで」とシート名を付けます。
そして上の数式を
 =SUM('ここから:ここまで'!C1)
とし、合計したいシートを新規に作成した「ここから」「ここまで」のシートで挟みます。
これで二つのシートに挟まれたシートの合計を求められます。
「2015年5月」シートの左に「ここから」シート、「2016年6月」シートの右側に「ここまで」シートを配置すれば、そのままの結果を得られます。
(「2015年8月」は除外したい…と言うときは、この2つのシートに挟まれない場所へシートを移動させれば良いとか応用もできます)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
一度番号順にならべ変えて試みようとおもったのですが
2015年5月時点でいた人が2016年6月時点ではいなくなっているなどしているので
ずれてしまい、結果として合算が間違ってしまう形になってしまいました。

ですが、この方法はとてもわかりやすく
そのほかの業務には使えそうなので是非参考にさせていただきたいと思います。
ありがとうございました。

お礼日時:2016/12/01 16:45

VBAならばもちろん出来ます。


①「集計」のシートを作成し、それに2016年6月の並び順で作成すればよいのでしょうか?
②データの数は総てのシートが同じでしょうか?
→ 違っている場合で2016年6月に無かった場合はどうするのですか?
③ データは3列だけしかないのでしょうか?
④ タイトル行はありますか?
    • good
    • 0
この回答へのお礼

早速のご質問ありがとうございます。

①はい、その形で大丈夫です。
②2016年6月には全てのデータ(名前)がありますが
 それ以前には無いデータがちらほらあります。
③すみません、実際のデータは以下の形で4列でした
 所属番号 番号 名前 数値
④1行目がタイトル行になっています。
 こちらは削除も可能です。

こちらで大丈夫でしょうか?
よろしくお願いいたします。

お礼日時:2016/12/01 10:18

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