人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelの質問です。

A B C D E F G ・・・

1 支社 支店 社員ID 氏名 a数量 b数量 c数量

2

3


上記の集計シートと1~31までの日計シートがあります。
1~31までのシートは休みだとデータがありませんので、毎日セルの位置が変わってしまいます。

こういった場合、集計シートで a数量・b数量・c数量を集計したいのですが、
どのような関数を使えばいいのか分かりません。
お分かりになる方、お知恵をお貸しいただけないでしょうか?

●質問者: cazica
●カテゴリ:コンピュータ
✍キーワード:Excel セル データ 休み 支店
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● heke2mee
●13ポイント

=SUM(1日のシート:28日のシート!E1)


この様に最初のシートと最後のシートを:で繋げるとできます。

このままだと月末の日付が変わるたびに集計シートを変更しないと駄目なので

最終日(月末)の後ろに終端用のダミーシートを作って


=SUM(1日のシート:終端シート!E1)


このようにして、新しく日付のシートを追加した場合は

シートの並びを終端シートより前に移動してあげればいけると思います。


複数のシートのデータを集計するには

http://support.microsoft.com/kb/883029/ja

◎質問者からの返答

回答ありがとうございます。

質問が初めてで、要領が分かっていないのに、

ご親切にありがとうございました。


2 ● km1967
●13ポイント

まずはお願いなのですが、

日計シートの形式など、

何も判らないと回答は難しくなりますので、必須だとご記憶ください。

不適当な回答が集まっても混乱をきたしますから、私への返信欄か、

あるいは、コメント欄を開く設定に変更してコメント欄)に、

書き加えておくことを勧めます。

◎質問者からの返答

回答ありがとうございます。

km1967さんのおっしゃるとおり、何も分からないと

回答できませんよね。

初めての質問で、要領を得てませんでした。

ご指摘ありがとうございました。


3 ● SALINGER
●26ポイント

関数の串刺し集計だとセルの位置が違うと厳しいので、集計作業はVBAでやってしまうのがいいかもしれません。

シートは"集計"シートと"1"?"31"のシートだけがあるとして、各表が例と同じように左上詰めだとします。

以下のコードを標準モジュールにコピペして最初の行の数量の数を変えて実行させてみてください。


VBAとはなんぞやという場合はこちらが参考になります。

http://www.officepro.jp/excelvba/ini/index1.html

http://www.officepro.jp/excelvba/ini/index2.html

http://www.officepro.jp/excelvba/ini/index3.html


Sub Macro()
 Const suryou As Integer = 3  '数量の数
 Dim ws As Worksheet
 Dim lastRow As Long
 Dim i As Long
 Dim j As Long
 Dim r As Range
 
 With Worksheets("集計")
 .Activate
 lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
 .Range(Cells(2, 5), Cells(lastRow, suryou + 4)).Clear
 For i = 2 To lastRow
 For Each ws In Worksheets
 If ws.Name <> "集計" Then
 Set r = ws.Range("C:C").Find(.Cells(i, "C").Value, lookat:=xlWhole)
 If Not r Is Nothing Then
 For j = 5 To suryou + 4
 .Cells(i, j).Value = .Cells(i, j).Value + ws.Cells(r.Row, j).Value
 Next j
 End If
 End If
 Next
 Next i
 End With
End Sub
◎質問者からの返答

回答ありがとうございます。

実際のシートでは、1行目に表題、2行目に取得日時、3行目がタイトルとなり、

4~1500行くらいまであります。集計対象のデータはG~Y列の範囲です。

(質問の仕方が下手ですみません。)

集計がいらない列もあるのですが、

Const suryou As Integer = 3 '数量の数 ←は集計する列の数でしょうか?

この場合はどのようにしたら良いのか、教えていただけないでしょうか?


4 ● SALINGER
●200ポイント ベストアンサー

特定の列を集計するということで修正しました。

社員IDはユニークだと思うので、社員IDで検索して集計しています。

社員IDの列はC列としていますが、違う場合は1行目を修正してください。


Sub Macro()
 Const sID As String = "C"
 Dim ws As Worksheet
 Dim lastRow As Long
 Dim i As Long
 Dim j As Long
 Dim r As Range
 
 With Worksheets("集計")
 .Activate
 lastRow = .Cells(Rows.Count, sID).End(xlUp).Row
 .Range(Cells(4, "M"), Cells(lastRow, "M")).Clear
 .Range(Cells(4, "N"), Cells(lastRow, "N")).Clear
 .Range(Cells(4, "O"), Cells(lastRow, "O")).Clear
 .Range(Cells(4, "P"), Cells(lastRow, "P")).Clear
 .Range(Cells(4, "S"), Cells(lastRow, "S")).Clear
 .Range(Cells(4, "U"), Cells(lastRow, "U")).Clear
 .Range(Cells(4, "Y"), Cells(lastRow, "Y")).Clear
 
 For i = 4 To lastRow
 For Each ws In Worksheets
 If ws.Name <> "集計" Then
 Set r = ws.Range(sID & ":" & sID).Find(.Cells(i, sID).Value, lookat:=xlWhole)
 If Not r Is Nothing Then
 .Cells(i, "M").Value = .Cells(i, "M").Value + ws.Cells(r.Row, "M").Value
 .Cells(i, "N").Value = .Cells(i, "N").Value + ws.Cells(r.Row, "N").Value
 .Cells(i, "O").Value = .Cells(i, "O").Value + ws.Cells(r.Row, "O").Value
 .Cells(i, "P").Value = .Cells(i, "P").Value + ws.Cells(r.Row, "P").Value
 .Cells(i, "S").Value = .Cells(i, "S").Value + ws.Cells(r.Row, "S").Value
 .Cells(i, "U").Value = .Cells(i, "U").Value + ws.Cells(r.Row, "U").Value
 .Cells(i, "Y").Value = .Cells(i, "Y").Value + ws.Cells(r.Row, "Y").Value
 End If
 End If
 Next
 Next i
 End With
End Sub
◎質問者からの返答

ありがとうございました。

拙い説明だったのに、思っていた通りの表が出来ました。

もう1点教えていただきたいのですが、各シートのフォントは8に設定しているのですが、

実行すると11のフォントで表示されるのはどうしてでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ