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

エクセルの使い方で質問です。

(シート1)
りんご 10
みかん 5
りんご 20
みかん 7

というシートがありまして、それを別のシートへ

(シート2)
りんご 30
みかん 12

という風に集計して出力する方法はありますでしょうか?

シート1の果物の種類は固定ではなく他の果物も追加されるかもしれません。

●質問者: greenleafstandard
●カテゴリ:コンピュータ インターネット
✍キーワード:12 みかん りんご エクセル 果物
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ

http://www11.plala.or.jp/koma_Excel/pivot_menu.html

ピボットテーブルを用いてやればいいですよ。


2 ● SALINGER
ベストアンサー

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