• ベストアンサー

エクセル グループ小計について

"項目としてA1に順番、B1に色、C1に数量1、D1に数量2、E1に数量3、F1に数量4にそれぞれ数値があります。 B2~B25までに茶、黒、白、がランダムに入っています。 色が変わる度に小計を自動的に表示する方法はないのでしょうか。 ただし、順番の並びは変更しない方法とする。 サンプル表を添付します。 よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (793/1659)
回答No.5

B列に色が文字で入っているなら、 データ、小計。 グループの基準:色 集計するフィールド:☑数量1 ~☑数量4 にチェックを入れる。 OK で小計が出せます。 この形が気に入らない。関数で出したい場合。補足に書いてください。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.6

回答No.2のVBAを一部変更しました。 終了後、間にデータを挿入した場合小計が変化しないので式に変更。 再度実行は不可でしたが、最終行のB列が「小計」の場合は処理を実行しないようにし、最終行の小計以降にデータを追加して実行した場合、追加分だけ処理するように変更。 セルの色の変化に対応したい場合は 回答No.3のNuboChanさんのコードを利用して If Cells(mRow, "B").Value <> Cells(mRow - 1, "B").Value Then の所を If Cells(mRow, "B").Interior.Color <> Cells(mRow - 1, "B").Interior.Color Then に変更してください。 条件付き書式で色を付けていることがあるのでしたら If Cells(mRow, "B").DisplayFormat.Interior.Color <> Cells(mRow - 1, "B").DisplayFormat.Interior.Color Then Sub Test2() Dim mRow As Long Dim LastRow As Long, fRow As Long, eRow As Long Application.ScreenUpdating = False LastRow = Cells(Rows.Count, "B").End(xlUp).Row If Cells(LastRow, "B").Value = "小計" Then MsgBox "追加されたデータはありません", vbInformation Exit Sub End If fRow = 2 eRow = LastRow Range(Cells(LastRow, "A"), Cells(LastRow, "F")).Copy Cells(LastRow + 1, "A") Cells(LastRow + 1, "A").Value = "" For mRow = LastRow To fRow + 1 Step -1 If Cells(mRow, "B").Value <> Cells(mRow - 1, "B").Value Then If Cells(mRow - 1, "B").Value = "小計" Then fRow = mRow Exit For End If Call mSubtotal(mRow, eRow) Rows(mRow).Insert eRow = mRow - 1 End If Next Call mSubtotal(fRow, eRow) Application.ScreenUpdating = True End Sub Sub mSubtotal(ByVal mRow As Long, ByVal eRow As Long) Dim mStRow As Long mStRow = eRow + 1 Cells(mStRow, "B").Value = "小計" Cells(mStRow, "C").Formula = "=SUM(C" & mRow & ":C" & eRow & ")" Cells(mStRow, "D").Formula = "=SUM(D" & mRow & ":D" & eRow & ")" Cells(mStRow, "E").Formula = "=SUM(E" & mRow & ":E" & eRow & ")" Cells(mStRow, "F").Formula = "=SUM(F" & mRow & ":F" & eRow & ")" Range(Cells(mStRow, "A"), Cells(mStRow, "F")).Interior.Color = 14998742 End Sub

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

B列で、同じ茶色でも、「1と2」と「14と15」は別グループになっている(考えているようです)。条件付き書式の例ではないようです。 こういう問題は、普通は、「両者を分けるコード」などのデータが別列にあるはずです。 それを区別しないで、質問のようなままグループ化したり、小計を入れたり、色分けすることは可能と思いますが、異常ではないか?VBAでやれば簡単でしょうが。 VBAの各行処理で、B列で1行前の色と、今の行の色が変われば、1行行挿入して、(変わらなければ、ワークエリアの数量1ー数量4の各項目を足しこんで)小計をシートのその行に書き込み、(ワークエリアの数量1ー数量4の小計は0にする)めばよい。 最終行には注意する。

すると、全ての回答が全文表示されます。
  • NuboChan
  • ベストアンサー率47% (801/1677)
回答No.3

既に回答は出ていますが 「色が変わる度に小計を自動的に表示する方法」とのことなので 色に重きを置くなら If Cells(mRow, "B").Interior.Color <> Cells(mRow - 1, "B").Interior.Color Then

JANIKYA
質問者

お礼

ありがとうございました。 時間があるときにためしてみます。

Powered by GRATICA
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.2

VBAでよろしければ以下で試してみてください。 小計行の色は Interior.Color = 14998742 の数値を変更して好みのものに合わせてください。 Sub Test() Dim mRow As Long Dim LastRow As Long, eRow As Long Application.ScreenUpdating = False LastRow = Cells(Rows.Count, "B").End(xlUp).Row eRow = LastRow Range(Cells(LastRow, "A"), Cells(LastRow, "F")).Copy Cells(LastRow + 1, "A") Cells(LastRow + 1, "A").Value = "" For mRow = LastRow To 3 Step -1 If Cells(mRow, "B").Value <> Cells(mRow - 1, "B").Value Then Call mSubtotal(mRow, eRow) Rows(mRow).Insert eRow = mRow - 1 End If Next Call mSubtotal(2, eRow) Application.ScreenUpdating = True End Sub Sub mSubtotal(ByVal mRow As Long, ByVal eRow As Long) Dim mStRow As Long mStRow = eRow + 1 Cells(mStRow, "B").Value = "小計" Cells(mStRow, "C").Value = WorksheetFunction.Sum(Range(Cells(mRow, "C"), Cells(eRow, "C"))) Cells(mStRow, "D").Value = WorksheetFunction.Sum(Range(Cells(mRow, "D"), Cells(eRow, "D"))) Cells(mStRow, "E").Value = WorksheetFunction.Sum(Range(Cells(mRow, "E"), Cells(eRow, "E"))) Cells(mStRow, "F").Value = WorksheetFunction.Sum(Range(Cells(mRow, "F"), Cells(eRow, "F"))) Range(Cells(mStRow, "A"), Cells(mStRow, "F")).Interior.Color = 14998742 End Sub

JANIKYA
質問者

お礼

ありがとうございました。 今後、参考にしたいとおもいます。

Powered by GRATICA
すると、全ての回答が全文表示されます。
  • kon555
  • ベストアンサー率51% (1849/3570)
回答No.1

 添付図のような、表の色別並び替えが不要ならsumif関数で実現できます。 https://dekiru.net/article/19911/  ただ添付図を見ると同じ「茶」や「黒」でもセルの塗り色で別カウントのようですが、これは正しいカウントですか?  もしそうなら自動化はマクロが必要になってきます。手動ありならフィルタと関数で可能ですが。 https://hamachan.info/win7/Excel/iro_count.html

JANIKYA
質問者

お礼

ありがとうございました 参考になりました。

Powered by GRATICA
JANIKYA
質問者

補足

茶が3ヶ所、黒が3ヶ所、白が2ヶ所あります。 それぞれのヶ所の下に集計された数値を表示したい。

すると、全ての回答が全文表示されます。

関連するQ&A