タイトル欄のアドレスは、エクセルファンクラブの該当する頁へのリンク先です。
詳しい事は、こちらのお願いをご覧になってください。
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ラウンジ】 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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ラウンジ】 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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ラウンジ】 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. 左の表を、果物を基準に並べ替えます。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||