Excelノート 24-01  合計・統合

HOME  検索  索引  もくじ  関数目次ージへ        次ページへ

タイトル欄のアドレスは、エクセルファンクラブの該当する頁へのリンク先です。
詳しい事は、こちらの
お願いをご覧になってください。

1  列項目ごとに、合計するには
2  複数のシートを新規シートで集計するには?
3  1行おきに、合計するには
4  とびとびに数字を拾って合計を出すには
5  串刺し集計
6  指定の列、全てを合計するには
7  印刷範囲内の最終行に合計
8  ステータスバーを使った集計(合計・最大値最小値・個数・平均)
9  複数のブックの値を、他のブックに集計するには
10 常に最終行の下に集計を表示するには?
11 項目ごとにまとめるには(データの統合)
12 複数のシートの内容を、他のシートにまとめて集計するには? (1)
13 複数のシートの内容を、他のシートにまとめて集計するには? (2)
14 項目ごとに集計するには?
15 最終行に合計を表示するには?
16 セルの色別に集計するには?

1 列項目ごとに、合計するには
http://www.keep-on.com/~excelyou/2000lng4/200009/00090183.txt 
    「同じデータをまとめるには?」  【VBAラウンジ】
このようなデータを、
   A列   B列    C列   D列  
  コード  メーカー  商品  個数 
   10     A     RRR   100
   20     B     DDD   100
   10     A     RRR   100
   10     A     PPP   100
   20     B     DDD   100
別シートに集計します。
   A列   B列    C列   D列  
  コード  メーカー  商品  個数
   10     A     PPP   100
   10     A     RRR   200
   20     B     DDD   200
Sub TotalMacro()
 Dim n As Long, lastR As Long
 Dim TTL As Double
 Dim INI As String, ASNam As String
 Application.ScreenUpdating = False
 
' シートコピー
 ASNam = ActiveSheet.Name
 Sheets(ASNam).Copy Before:=Sheets(1)
 
' 最終行取得
 lastR = ActiveSheet.UsedRange.Rows.Count
 
' A〜C列の項目をまとめて書く列を作り、式を記入
 Cells(1, 5) = "KARI"
 Cells(2, 5) = "=RC[-4]&RC[-3]&RC[-2]"
 Cells(2, 5).Select
 Selection.AutoFill Destination:=Range(Cells(2, 5), Cells(lastR, 5)), _
 Type:=xlFillDefault
 
' 同上列でソート
 Range("E1").Select
 Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlYes, _
 OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
 SortMethod:=xlPinYin
 
' 合計列を作る(見出し)
 Cells(1, 6) = "合計"
 
' 項目別に集計
 INI = Cells(2, 5).Value ' 項目名の初期値を与える
 TTL = Cells(2, 4).Value ' 数値の初期値を与える
 n = 3
 Do Until n >= lastR + 2
  If Cells(n, 5).Value = INI Then
  
' 項目名が上の行と等しければ数値を累計
   TTL = TTL + Cells(n, 4)
  Else
   
' 異なれば一行上に合計値を記入
   Cells(n - 1, 6) = TTL
   
' 初期値を更新
   INI = Cells(n, 5)
   TTL = Cells(n, 4)
  End If
  n = n + 1
 Loop
 
' 不要行・不要列を削除
 For n = lastR To 2 Step -1
  If Cells(n, 6) = "" Then Rows(n).Delete shift:=xlUp
 Next
 Range(Columns(4), Columns(5)).Delete shift:=xlToLeft
 MsgBox ("終わりました。")
 Application.ScreenUpdating = True
 Cells(1, 1).Select
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
2 複数のシートを新規シートで集計するには?
1.新規シートで オートSUM をクリックします。
2.集計したい先頭シートのセルをクリックし、そのままシフトキーを押しながら
  集計したい最後のシートのセルをクリックします。
  すると新規のセルには、このような数式が出ます。
   
=SUM(Sheet1:Sheet2!A1)
3 1行おきに、合計するには
http://www.keep-on.com/~excelyou/2000lng2/200005/00050145.txt
  「一行置きに集計するには?」 【関数ラウンジ】
Excel97、Excel2000 共通
 偶数行、奇数行の和は、配列数式を使用すれば求めることが出来ます。
 データ範囲が A1:A20 とすると、
 =SUM((MOD(ROW(A1:A20),2)=1)*A1:A20) と入れて、CTRL+SHIFT+ENTER を押します。
 すると、数式バーに、{=SUM((MOD(ROW(A1:A20),2)=1)*A1:A20)} と表示されます。
 また、偶数行の和を求めたいときは、
 =SUM((MOD(ROW(A1:A20),2)=0)*A1:A20) と入れて、同じように配列数式にします。
最終行が奇数なら奇数行を、偶数なら偶数行を集計します。
Sub 一行おきに合計()
 x& = Range("A65536").End(xlUp).Row
 If x& Mod 2 = 1 Then
  Start = 1
 Else
  Start = 2
 End If
 For i = Start To x& Step 2
  Cells(i, 1).Copy
  Cells(x& + 1, 1).PasteSpecial xlValues, xlAdd
  Application.CutCopyMode = False
  Cells(i, 2).Copy
  Cells(x& + 1, 2).PasteSpecial xlValues, xlAdd
  Application.CutCopyMode = False
 Next i
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
集計を開始する行、飛ばす行を指定します。(上のマクロをアレンジしました)
Sub 指定行おきに合計()
 Dim x As Long, i As Long, S As Integer, T As Integer
 S = Application.InputBox("集計開始行は?", Type:=1)
 T = Application.InputBox("何行おきに集計しますか?", Type:=1)
 x = Range("A65536").End(xlUp).Row
 For i = S To x Step T
  Cells(i, 1).Copy
  Cells(x + 1, 1).PasteSpecial xlValues, xlAdd
  Application.CutCopyMode = False
  Cells(i, 2).Copy
  Cells(x + 1, 2).PasteSpecial xlValues, xlAdd
  Application.CutCopyMode = False
 Next i
 Range(Cells(x + 1, 1), Cells(x + 1, 1)).Font.ColorIndex = 5
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
4 とびとびに数字を拾って合計を出すには
Excel97、Excel2000 共通
 1.[Ctrl]キーを押しながら、クリック
 2.挿入・名前・定義をクリック
 3.名前欄に「漢字で、合計 と入れます。
 4.合計を出したいセルに、
=SUM(合計)
5 串刺し集計 
(例えば、シート4のA1に、シート1から3のA1を集計する場合) 
Excel2000
 1. 集計(合計)を出すSheet4のA1を選び、Σボタンをクリック (SUM関数) します。
 2. 次に集計する最初 (一番左) のシートタブ (Sheet1) をクリックし、
 3. Shiftを押しながら、最後 (一番右) のシートタブ (Sheet3) をクリックします。
 4. その後、集計するセル(Sheet3のA1)をクリックすれば、Sheet4のA1に
  
=SUM(Sheet1:Sheet3!A1) のような式が出来上ります。
Excel97
 上記4番の操作が出来ませんので、Sheet4のA1に直接数式を入力します。
6 指定の列、全てを合計するには
Sub D列合計()
 Dim LastRow As Long
 LastRow = ActiveSheet.Cells(Cells.Rows.Count, 4).End(xlUp).Row
 Cells(LastRow + 1, 4).Value = WorksheetFunction.Sum(Range(Cells(2, 4), Cells(LastRow, 4)))
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
7 印刷範囲内の最終行に合計
Sub 印刷範囲内最終行に合計()
 Dim 総ページ数 As Integer, 合計行 As Long
 総ページ数 = (ActiveSheet.HPageBreaks.Count + 1) * (ActiveSheet.VPageBreaks.Count + 1)  
 合計行 = 総ページ数 * 30 '30の所は1行の行数を入れます
 Cells(合計行, 3).Value = "合 計"
 Cells(合計行, 4).Value = WorksheetFunction.Sum(Range(Cells(2, 4), Cells(合計行 - 1, 4)))
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
8 ステータスバーを使った集計(合計・最大値最小値・個数・平均)
Excel97、Excel2000 共通
複数のセルを選択すると、規定の設定でシート見出しの下のバーに、合計が表示されます。
このバーをステータスバーと言い、右クリックすると、
なし、平均、データの個数、数値の個数、最大値、最小値、合計
が選択できます。
9 複数のブックの値を、他のブックに集計するには
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200102/01020028.txt
  「ブックの串刺し」 【編集ラウンジ】
http://www.keep-on.com/~excelyou/2000lng4/200005/00050370.txt 
  「統合について教えて下さい。」 【VBAラウンジ】
集計する各ブックは、同じフォルダ内にあるものとし、
ブック名は、Book1〜Book20(20以上増えても、また減ってもOKです)としています。
合計を表示するブックも同じフォルダ内にあるものとするのですが、
名前がBook21だと警告のメッセージが出てしまいますので、
他の名前(例えば「合計」など)にしてください。
 Sub test2()
 Dim MyFile As String, MyPath As String
 Dim SumFile() As Variant, i As Long
 MyPath = ThisWorkbook.Path & "\"
 MyFile = Dir(MyPath, vbNormal)
 Do Until MyFile = ""
  If MyFile Like "*Book*.xls" Then
   ReDim Preserve SumFile(i)
   'A1からA10の値を変数に代入
   SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C1"
   i = i + 1
  End If
  MyFile = Dir
 Loop
 If i = 0 Then MsgBox "データが有りません": Exit Sub
 Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile()
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
10 常に最終行の下に集計を表示するには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin2/wwwlng.cgi?print+200106/01060222.txt
  「集計行を常に最下行に表示したい」 【関数ラウンジ】
A列を対象に集計します。
Sub miko_test()
 Dim L As Long, myRange As Range
 L = Cells(Rows.Count, 1).End(xlUp).Row + 1
 Set myRange = Worksheets("Sheet1").Range(Cells(1, 1), Cells(L, 1))
 Cells(L, 1) = Application.WorksheetFunction.Sum(myRange)
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
11 項目ごとにまとめるには(データの統合)
http://cgi.fuji.ne.jp/~fj2094/cgi-bin2/wwwlng.cgi?print+200107/01070094.txt
  「VLookup以外にできる方法は?」 【関数ラウンジ】
このようなデータを、
    A    B     C     D     E
1  部番  6月1日 6月2日 6月3日 6月4日
2  AD300    2
3  AD220         3
4  AD220              4
まとめます。
    A     B      C     D     E
6  部番   6月1日  6月2日  6月3日  6月4日
7  AD300    2
8  AD220          3      4
 
Excel97、Excel2000、Excel2002 共通
1.A1:E1をコピーし、A6:E6に貼り付けます。
2.A6:E6を選択し、メニューのデータ、統合、統合元範囲の右側の左上向きの
  赤い矢印をクリックした後、A1:E4の範囲を選択指定する。
3.統合の基準に上端行、左端列ともチェックし、OKとします。
      ※ 例では同一シートですが、他のシートでも同様にできます。
12 複数のシートの内容を他のシートにまとめて集計するには?(1)
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200107/01070111.txt
  「「出張」の回数と日付を出すには?」 【VBAラウンジ】
  A B C D E
1 氏名 1日 2日 3日 4日
2 ああああ 出張     出張
3 いいいい     出張         
4 ううううう   出張    
5 ええええ     出張  
  A B C D
1 出張日数 6日 6日 3日
2 社員氏名 ああああ いいいい うううう
3   2001年6月1日 2001年6月3日 2001年6月2日
4   2001年6月21日 2001年6月17日 2001年7月2日
5   2001年7月1日 2001年7月3日 2001年8月2日
Sub 出張集計()
 Dim WS As Worksheet
 Application.ScreenUpdating = False
 If Worksheets(1).Name <> "出張集計" Then
  Worksheets.Add(Before:=Worksheets(1)).Name = "出張集計"
  Rows(2).BorderAround LineStyle:=xlContinuous
  Columns(1).Borders(xlRight).LineStyle = xlContinuous
  Cells(1, 1).Value = "出張日数"
  Cells(2, 1).Value = "社員氏名"
  Worksheets(2).Range("A2:A86").Copy
  Range("B2").PasteSpecial Paste:=xlValues, Transpose:=True
  Application.CutCopyMode = False
 End If
 For Each WS In Worksheets
  If WS.Name <> "出張集計" Then
   For i% = 2 To 86
    For j% = 2 To 32
     If WS.Cells(i%, j%).Value = "出張" Then
      Worksheets(1).Cells(65536, i%).End(xlUp). _
      Offset(1).Value = WS.Name & j% - 1 & "日"
     End If
    Next j%
   Next i%
  End If
 Next WS
 With Worksheets(1)
  For k% = 2 To 86
   MyD% = .Cells(65536, k%).End(xlUp).Row
   If MyD% > 2 Then
    .Cells(1, k%).Value = MyD% - 2 & "日"
   End If
  Next k%
  .Columns("A:CH").AutoFit
 End With
 Application.ScreenUpdating = True
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
13 複数のシートの内容を他のシートにまとめて集計するには?(2)
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200107/01070111.txt
  「「出張」の回数と日付を出すには?」 【VBAラウンジ】
  A B C D E
1 氏名 1日 2日 3日 4日
2 ああああ 出張     出張
3 いいいい     出張         
4 ううううう   出張    
5 ええええ     出張  
  A B C D E
1 氏名 出張日数      
2 ああああ 6 2001/6/1 2001/6/21 2001/7/1
3 いいいい 6 2001/6/3 2001/6/17 2001/7/3
4 ううううう 3 2001/6/2 2001/7/2 2001/8/2
5 ええええ 15 2001/6/3 2001/6/5 2001/6/21
6 おおおお 9 2001/6/3 2001/6/17 2001/6/30
Sub miko_test()
  Dim i As Integer, j As Integer, k As Integer, m As Integer, retu As Integer
  Dim WS As Worksheet, LastRow As Integer, Lastcol As Integer
  Application.ScreenUpdating = False
  On Error GoTo TRAP
  Worksheets("出張一覧").Select
  Cells.ClearContents
  Worksheets("2001年6月").Columns("A:A").Copy Worksheets("出張一覧").Range("A1")
  LastRow = Range("A65536").End(xlUp).Row
  For Each WS In Sheets
   If WS.Name <> "出張一覧" Then
    For j = 2 To LastRow
    Lastcol = WS.Cells(1, Columns.Count).End(xlToLeft).Column
     For k = 2 To Lastcol
      If WS.Cells(j, k) = "出張" Then
       retu = Cells(j, Columns.Count).End(xlToLeft).Column
       Cells(j, retu + 1) = WS.Cells(1, k)
      End If
     Next
    Next
   End If
  Next
  Cells.NumberFormatLocal = "yyyy/m/d"
  Columns("B:B").Insert Shift:=xlToRight
  Columns("A:B").NumberFormatLocal = "G/標準"
  Range("B1") = "出張日数"
  For m = 2 To LastRow
   retu = Cells(m, Columns.Count).End(xlToLeft).Column
   If retu > 1 Then
    Cells(m, 2) = retu - 2
   Else
    Cells(m, 2) = 0
   End If
  Next
  TRAP:
  Application.ScreenUpdating = True
 End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
14 項目ごとに集計するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200205/02050249.txt
  「同じものを自動的に足して、一行にするには?」 【VBAラウンジ】
果物 単価 数量 金額 左のような表を

右のように
集計します
果物 単価 数量 金額
スイカ 500 2 1,000 いちご 300 6 1800
いちご 300 6 1,800 いちご 300 6 1800
スイカ 500 3 1,500 いちご 計   12 3600
メロン 200 5 1,000 スイカ 500 3 1500
バナナ 100 8 800 スイカ 500 2 1000
メロン 200 5 1,000 スイカ 計   5 2500
メロン 200 7 1,400 バナナ 100 8 800
いちご 300 6 1,800 バナナ 計   8 800
        メロン 200 5 1000
        メロン 200 7 1400
        メロン 200 5 1000
        メロン 計   17 3400
        総計   42 10300

1. 左の表を、果物を基準に並べ替えます。
2. 【データ】【集計】集計の方法を【合計】のまま、集計するフィールドで【数量】【金額】にチェックを入れます。
 ※ この集計は合計以外にも、データの個数、平均、最大値、最小値、標準偏差等が計算できます。

15 最終行に合計を表示するには?
合計を表示したい最終行で右クリックすると、それより上のセルの合計を表示するSUM関数を書き込みます。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 Cancel = False
 If MsgBox("このセルに、これより上のセルの合計を表示しますか?", vbOKCancel + vbQuestion) = vbOK Then
  Target = "=SUM(R[-" & Target.Row - 1 & "]C:R[-1]C)"
 Else: Exit Sub
 End If
 Cancel = True
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
16 セルの色別に集計するには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200311/03110103.txt
 「色付きセル別集計をするには?」 【編集ラウンジ】
'シート内の全セルを 最後の行の下に集計するコードです
Sub miko_test()
 Dim r As Long, j As Long
 Dim c As Integer, i As Integer
 Dim k As Integer, m As Long
 On Error Resume Next
 '使用範囲セルの最終行、最終列を取得
 With ActiveSheet.UsedRange
  r = .Row + .Rows.Count - 1
  c = .Column + .Columns.Count - 1
 End With
 Cells(r + 2, 1) = "色なし"
 m = r + 3
'色有り合計欄先頭行
 For i = 1 To c '列ループ
  For j = 1 To r '行ループ
   '色なしの場合
   If Cells(j, i).Interior.ColorIndex = xlNone Then
    Cells(r + 2, 2) = Cells(r + 2, 2) + Cells(j, i)
   Else
    '最初の色有りデータの場合
    If Cells(r + 3, 1).Interior.ColorIndex = xlNone Then
     Cells(r + 3, 1).Interior.ColorIndex = Cells(j, i).Interior.ColorIndex
     Cells(r + 3, 2) = Cells(j, i)
    Else
     '合計欄の色がなくなるまでループ
     Do While Cells(m, 1).Interior.ColorIndex <> xlNone
      'データ欄と、合計欄の色が同じ場合
      If Cells(j, i).Interior.ColorIndex = Cells(m, 1).Interior.ColorIndex Then
       Cells(m, 2) = Cells(m, 2) + Cells(j, i)
       m = r + 3
'色有り合計欄先頭行
       Exit Do
      End If
      m = m + 1
     Loop
     If m <> r + 3 Then
'新しい色の場合
      Cells(m, 1).Interior.ColorIndex = Cells(j, i).Interior.ColorIndex
      Cells(m, 2) = Cells(m, 2) + Cells(j, i)
      m = r + 3
'色有り合計欄先頭行
     End If
    End If
   End If
  Next
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
17  
 
18  
 
19  
 
20  
 
     

HOME  検索  索引  もくじ  関数目次ージへ        次ページへ

このページのTOPへ

 

 

 

 

inserted by FC2 system