ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

エクセルで同じ文字列が並んだ行の合計値を出す

エクセルの備忘録。

下図のようにA列に同じ文字列が隣接する場合に、その文字列ごとのB列の合計値を算出‥それを全ての行に対して手軽に行う方法について。
この例だと同じパスのアセットのファイルサイズを合計したい場面になります。

f:id:moko_03_25:20160823023951p:plain

つまりこうなればOKという訳です。

f:id:moko_03_25:20160823023952p:plain

もっと簡単な表でやってみます。
空欄のC1セルを選んで‥

=IF($A1=$A2, "",SUMIF($A:$A,$A1,$B:$B))

と入力します。こちらは我がエクセル師匠に教えてもらいました。
意味は‥
①(IF部分)もしセルA1がセルA2と同じ値なら今選択しているセルC1は空白にする
②(SUMIF部分)IFに該当しないならA列全体の範囲で値がA1と同じ行のB列を合計する

しかしA列の値がA B A B C Aみたいにバラバラだったらうまくいかないのでソートして固めておかないとダメですね。

さてまだ何も表示されません。

f:id:moko_03_25:20160823023945p:plain

セルをだーーっと最下行までコピーします。
するとA列で同じ文字列が続いた場合は最後の行のC列に合計値が入ります。
それ以外のセルが空白のままというのがミソです。

f:id:moko_03_25:20160823023946p:plain

一番頭に一行挿入してC列をフィルタリング。

f:id:moko_03_25:20160823023947p:plain

空白セルを非表示にします。

f:id:moko_03_25:20160823023948p:plain

これで同じ行をまとめてしまって、ついでにB列の合計値を出せました。

f:id:moko_03_25:20160823023949p:plain

結果を別のシートにでもコピー&ペースト。
いらなくなったB列を削除して完成です。

f:id:moko_03_25:20160823023950p:plain

以上になります。

同じ文字列が隣接する場合にその行を削除してしまいつつも直接B列に合計値を上書けたらもっと手間が省けるのですがVBAでやるしか無いんですかね。。
良い方法をご存じでしたらご教授くださいっ。

*翌日の追記*
検索でこちらのページが見つかり、そのままサックリできました!

Sub Sample()
    Dim c As Range
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    With Sheets("Sheet1")
        For Each c In .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
            dic(c.Value) = dic(c.Value) + Val(c.Offset(, 1).Value)
        Next
        .Columns("C:D").ClearContents
        .Range("C1").Resize(dic.Count).Value = WorksheetFunction.Transpose(dic.keys)
        .Range("D1").Resize(dic.Count).Value = WorksheetFunction.Transpose(dic.items)
    End With
 End Sub
(上記サイト様より引用させて頂いています)

ついでにA列B列を削除して値の表示形式をユーザー定義でMiB表記に変えて、一定以上の値は赤字に塗るとかも追記してしまうと良さそうですね。