(シート1)
りんご 10
みかん 5
りんご 20
みかん 7
というシートがありまして、それを別のシートへ
(シート2)
りんご 30
みかん 12
という風に集計して出力する方法はありますでしょうか?
シート1の果物の種類は固定ではなく他の果物も追加されるかもしれません。
Excelで何か処理をしようと思ったら考えられる方法は3つ
①Excelの機能を使う
これはtakntさんの回答にあるピボットテーブルを使う方法なので省略。
②数式を使う
かなりトリッキーな方法だけどやってできないことはない。
例えば質問のデータがSheet1のA1セルから入っていたとすると
Sheet2のA1セルの数式を
=INDEX(Sheet1!A:A,SMALL(IF(COUNTIF(OFFSET(Sheet1!A$1,0,0,ROW(Sheet1!$A$1:$A$99)),Sheet1!$A$1:$A$99)=1,ROW(Sheet1!$A$1:$A$99),100),ROW()))
と入れて、Shift+Ctrl+Enterを押して{}で囲み配列数式にする。
Sheet2のB1セルの数式を
=SUMIF(Sheet1!A:A,A1,Sheet1!B:B)
と入れて、A1とB1を十分に下にコピーする。
数式中の99というのは99行まで対応ということです。あんまり大きくすると配列数式なので重くなります。
③VBAを使う
使ったことがあればこれが一番簡単だったりする。
以下のコードを標準モジュールにコピペして実行。
Sub Macro() Dim i As Long Dim myDic As Object Dim lastRow As Long Dim myKey As Variant Dim myItem As Variant Set myDic = CreateObject("Scripting.Dictionary") With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow If myDic.exists(.Cells(i, "A").Value) Then myDic.Item(.Cells(i, "A").Value) = myDic.Item(.Cells(i, "A").Value) + .Cells(i, "B").Value Else myDic.Add .Cells(i, "A").Value, .Cells(i, "B").Value End If Next i End With With Worksheets("Sheet2") .Cells.Clear myKey = myDic.keys myItem = myDic.items For i = 0 To UBound(myKey) .Cells(i + 1, "A").Value = myKey(i) .Cells(i + 1, "B").Value = myItem(i) Next i End With Set myDic = Nothing End Sub
※上記シート名はSheet1、Sheet2としています。
Excelで何か処理をしようと思ったら考えられる方法は3つ
①Excelの機能を使う
これはtakntさんの回答にあるピボットテーブルを使う方法なので省略。
②数式を使う
かなりトリッキーな方法だけどやってできないことはない。
例えば質問のデータがSheet1のA1セルから入っていたとすると
Sheet2のA1セルの数式を
=INDEX(Sheet1!A:A,SMALL(IF(COUNTIF(OFFSET(Sheet1!A$1,0,0,ROW(Sheet1!$A$1:$A$99)),Sheet1!$A$1:$A$99)=1,ROW(Sheet1!$A$1:$A$99),100),ROW()))
と入れて、Shift+Ctrl+Enterを押して{}で囲み配列数式にする。
Sheet2のB1セルの数式を
=SUMIF(Sheet1!A:A,A1,Sheet1!B:B)
と入れて、A1とB1を十分に下にコピーする。
数式中の99というのは99行まで対応ということです。あんまり大きくすると配列数式なので重くなります。
③VBAを使う
使ったことがあればこれが一番簡単だったりする。
以下のコードを標準モジュールにコピペして実行。
Sub Macro() Dim i As Long Dim myDic As Object Dim lastRow As Long Dim myKey As Variant Dim myItem As Variant Set myDic = CreateObject("Scripting.Dictionary") With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow If myDic.exists(.Cells(i, "A").Value) Then myDic.Item(.Cells(i, "A").Value) = myDic.Item(.Cells(i, "A").Value) + .Cells(i, "B").Value Else myDic.Add .Cells(i, "A").Value, .Cells(i, "B").Value End If Next i End With With Worksheets("Sheet2") .Cells.Clear myKey = myDic.keys myItem = myDic.items For i = 0 To UBound(myKey) .Cells(i + 1, "A").Value = myKey(i) .Cells(i + 1, "B").Value = myItem(i) Next i End With Set myDic = Nothing End Sub
※上記シート名はSheet1、Sheet2としています。
コメント(0件)