• ベストアンサー

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

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

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (715/1480)
回答No.5

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

その他の回答 (5)

  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答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/17068)
回答No.4

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

  • NuboChan
  • ベストアンサー率47% (745/1583)
回答No.3

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

JANIKYA
質問者

お礼

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

Powered by GRATICA
  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答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
  • ベストアンサー率52% (1754/3367)
回答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

  • エクセルのグループ別集計について

    縦に種類別にA,B,Cがランダムに並んでいます。 横に数量1から6まで6列並べたら表があります。 この表から列ごとに種類別(A,B,C)に集計する方法を教えてください。 サンプル表を添付します。

  • エクセルデータの抽出方法について

    A3:E3に横に仕入れ先、品名、数量、金額の項目がありランダムに15行データが入っています。 この表をG3:J17に仕入れ先AをM3:Q17に仕入れ先Bをという順番で仕入れ先毎にデータを抽出する方法を教えてください。 サンプル表を添付します。

  • 条件付き書式設定について

    1行目を項目としてA1~K19までデータを入れてあります。 B列に識別として黒、白、茶があり黒、白、茶毎に合計を出すためにデータタブの小計で識別の色毎に合計をしました。  その後条件付き書式で「数式を使用して書式を設定するセルを決定」に数式として「=AND($B2="黒 集計",B2<>"")を入力し適用範囲をA2:K19としましたが、集計行のB~E列およびK列に色が付きません。 なぜでしょうか。 数式が間違っているのか、それともやり方が悪いのかわかりません。 集計行に隙間なく色を付けるためにはどのようにしたらよいのでしょうか。 サンプルデータを添付しますのでご教授ください。

  • 条件付き書式設定について

    A列列に白、黒、茶など色をならべてあります。 B列~E列のそれぞれの行に数値を入れてあります。 下記のとおり色を付けたいのですがどのようにしたらよいでしょうか A2が白の場合、B2~E2行の数値があるセルに緑の色を付ける。 A3が黒の場合、B3~E3行の数値があるセルに黄色の色を付ける。 A3が茶の場合、B5~E5行の数値があるセルに赤色の色を付ける。 以下も同じようにしたい。 サンプル表を添付します。 よろしくお願いします。

  • Excel VBA 「小計」と入力したら自動計算

    エクセルの小計の計算について質問いたします。    A列    B列      C列   D列     E列    F列 1 施設名  2      商品名,内容   1    単位     単価    金額(数量×単価) 3      商品名,内容   1    単位     単価    金額(数量×単価) 4                              小計     ●●●● ――――――――――――――――――――――――――――――――― 5 施設名 6      商品名,内容   1    単位     単価    金額(数量×単価) 7      商品名,内容   1    単位     単価    金額(数量×単価) 8      商品名,内容   1    単位     単価    金額(数量×単価) 9                              小計     ●●●● ―――――――――――――――――――――――――――――――――                                合計     ●●●● 施設名ごとに項目が複数あり、施設ごとに項目の数も違います。 これを施設ごとに●の所に小計を出したいです。 「小計」が数回にわたり出てくる場合は、「前回小計をした次のセルから今回小計するセルの前まで」を計算させる訳ですが、どんなVBAを組めばいいのかわかりません。 理想としてはにE列に小計という文字を入れるとF列に自動で計が出るようにして、さらに小計の合計を最後の行のセルにだしたいです。。 さらに、見やすくなるように小計の下のセルにA~Fの間に太線を引いて施設ごとの区切りがわかるようにしたいです。。 繰り返し作業ばかりで大変です。 どなたか知恵をお貸しください。

  • エクセル連続していない不規則な数値セルの小計を右隣空白セルに一発で出すには?

     エクセル2000で定期的に部材の出庫表を作成しているのですが、日々、データーが変動し、表が更新されます。    A   B  C  D  E  F  G 1コード   1  2  3  4  5  6  2名称   数量 ← ← ← ← 3部材1  10  5    4部材2  30 24     8 5部材3  25    40 15     23 6部材4      8 15     32 7部材5      9  18 8部材6  20 30  45       45 7  上記のような形式で表が作成され、実際はもっと横長の表になります。  各部材はB3以降に数量が記載され、最右端に合計セルがあります。数値セルの各行に所々、空白セルがあります。(セルには数式は入っていない)  少しでも表を見やすくしたいので、数値データーセルが連続しているセルの右隣の空白セルに簡単に小計を差し込みたいのですがその方法が分かりません。  仕方ないので手動にてCTRLキーを押しながら任意の数値セルを選択し、Σで合計していますが、作業が進まず、ミスも出ます。  上記の表の部材1ですと、B3、C3の合計(小計)15を空白のD3セルに、部材3ならD5、E5の小計55をF5に、部材6ならB8、D8の合計95をE8に表示させたいのです。 過去にもこの質問をしたのですが、VBAでないと出来ないのでしょうか?私はVBAでの記述がよく理解できません。他に簡単に連続する数値セルの合計を右隣の空白セルに表示する方法は無いでしょうか?IF関数等を入れたりしていますが、循環エラーが出たり、上手く行かず、教えていただけませんか?手入力しか無理でしょうか?これで困っています。

  • 総計をエクセルVBAで出すには。。

    A列にいくつかランダムに小計が入っておりB列の数値をA列の小計が入っている 行まで数式で足しています。 例=SUM(B16:B20)   A列の最終行に総計が入っているのですが総計にはB列のいくつかの小計行を 足して総計を出したいです。 小計を出すにはこちらで教えて頂き、VBAで自動でいれることができたのですが 総計をいれることができません。 VBAではどのように組めばいいのでしょうか?

  • エクセルの関数での処理方法

    下記のようなデーターベースがあります  列 A   B   C  D   E    F 行  4/1 4/10 4/20 1   青  100 青 1100 青 11000 2  黄色  200 黄色 1200 黄色 12000 3 緑  300 緑 1300 緑 13000 4  赤  400 赤 1400 赤 14000 5  紫  500 紫 1500 紫 15000 6  黒  600 黒 1600 黒 16000 7  白  700 白 1700 白 17000 8  茶  800 茶 1800 茶 18000 9  水色  900 水色 1900 水色 19000 10 朱色 1000 朱色 2000 朱色 20000 上の図では分かりにくいかも知れませんが、 A列には上から4/1、青、黄・・・ B列には上から空白、100、200・・・  C列には上から4/10、青、黄・・・ D列には上から空白、1000、2000・・・  E列には上から4/20、青、黄・・・ F列には上から空白、10000、20000・・・と並んでます。 4/1の項目は4/9までの値段 4/10の項目は4/19までの値段 4/20の項目は4/30までの値段になります。 4/5、4/10/、4/15、4/25の白の値段を調べるにはどのようにすればいいでしょうか? 4/5、4/10、4/15、4/25のそれぞれに VLOOKUP関数の式を入れて調べるんではなく ひとつの式を入れて調べる日付のセルの値だけが 変わるだけで 全部同じ式で反映されるようにしたいんですが・・・ できますか? VOOLUP関数やIF関数を組み合わせてやってるんですが うまくいきません。 それともマクロでないとできないですか? よろしくお願いします。

  • Access のフォームで小計とかできませんか?

    よろしくお願いします。 Accessのレポートでは、グループごとに小計を出したり、フッター・ヘッターを付けたりできますけど、フォームではできないんでしょうか? 例えば、販売データの商品分類にABCのランクをつけて、ランク別に出荷数量と売上金額の集計をフォームでできるようにしたいです。 その際に、ページフッターにまとめて小計を表示するのではなく、ランクごとに小計を入れてみたりとか、AランクとBランクの間に1行分だけ行間を開けるとか・・・ レポートだと、プレビューで停止しても画面操作が不便ですし、日次データなので印刷してファイルするほどのデータでもありません。 良い方法があれば教えてください。

  • エクセルシートの紐付け

    仕事で至急資料を作成しなければなりませんが、データーがまとめられず困っています。 エクセルで 【Sheet1】は1列しかありませんが、数値がランダムに並んでおりダブってもいます。この並び順番は変えられません。  A ID番号 5 136 400 53 6 400 【Sheet2】はID番号に対する情報がADの列まで入っています。  A      B     C      D    ・・・AD ID番号  製品No  在個数  売り上げ ・・・ 400     54     100     20 6      84      3      50 53     200     40      20 136     3      500     2 この【Sheet2】の情報を【Sheet1】の並びに対応させ並び替えたものが欲しいのですが、方法がわかりません。 急いでいます。 助けてください!

専門家に質問してみよう