特定範囲の合計を求める方法

このQ&Aのポイント
  • リスト中の合計金額を算出する方法について説明します。
  • 空白行の数に基づいて題目を分類し、題目先頭空白3桁のものの金額を合計して表示する方法をご紹介します。
  • 関数またはマクロを使用して対応することができます。
回答を見る
  • ベストアンサー

特定範囲の合計を求める方法

OFFICE2010 A列に題目の文字列(文字列の長さは不定) B列に価格としての数値データ が入ったリストがあります(5000行くらい) それぞれの題目の先頭には空白行が3桁入ったものと、6桁入った題目が存在している。 題目先頭空白3桁のものは、題目先頭空白6桁のもので構成されているイメージ。 このリストで、それぞれの題目先頭空白3桁のものの金額を算出したい。 合計金額の表示はC列で、題目先頭空白3桁と同行に配置したい。 下記の様なリストがあったとして 題目      価格  A001    b001    100    c001     50   B001    d002    300    e004    500    J009    1000 下記の様に合計を表示したい 題目      価格   合計  A001          150    b001    100    c001     50   B001         1800    d002    300    e004    500    J009    1000 対応方法は、関数でもマクロでもどちらでも可です。 よろしくお願いします

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

マクロですが Sub Test()   Dim c As Range, Start As Long   Start = 2   For Each c In Range("A2", Cells(Rows.Count, "A").End(xlUp))     If Left(c.Offset(1).Value, 6) <> Space(6) Or c.Offset(1).Value = "" Then       If Start < c.Row Then         Cells(Start, "C").FormulaR1C1 = "=SUM(R[1]C[-1]:R[" & c.Row - Start & "]C[-1])"       End If       Start = c.Offset(1).Row     End If   Next End Sub

3620313
質問者

お礼

ありがとうございます。 ばっちりです。助かりました。

その他の回答 (2)

  • msMike
  • ベストアンサー率20% (363/1772)
回答No.3

貴方の日本語が理解できないので確認させてください。 「空白行が3桁」とはどういう意味ですか? 「空白行」とは文字通り「空白の行」であって、桁数もヘッチャもないでしょう?

3620313
質問者

補足

失礼しました。 空白行が3桁は、空白が3桁の誤記です。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

こういうデータだと、Excelやアクセスの分類や集計向けでない。 (ソート、フィルタ、検索、集計などに置いて) 修正表を作らないとむつかしい。 修正したデータを作って、そしてピボットテーブルに持ち込むことだ。エクセル分類・集計の最大のツールですよ。 「題目」のデータのあり様が詳細が不明(空白に見えている部分が、半角か全角かTABかなど。) プログラムをやらないと、この辺のことがわからず、大切と考えて、詳しく書けないだろう。 下記は、その点を勝手に考えて、決めてサンプル例でやったが。 例データ A2:B12 A列=コード B列=計数 A001 b001   1 c001   1 B001 d002   2 e004   3 J009   4 C001 d002   5 e004   6 J009   7 ーー 標準モジュールに ActiveSheet.Columns(2).Insert ’B列に列章入 ActiveSheet.Columns(2).Insert ’B列に列章入 For i = 2 To 100000 ’最大10万行仮定 If Cells(i, "A") = "" Then Exit Sub ’A列セルで空白セルまで繰り返し x = Cells(i, "A") For j = 1 To Len(x) If Mid(x, j, 1) <> " " Then 'A列で非空白文字の位置探索 p = j - 1 '--- If p = 3 Then bunrui1 = Trim(Cells(i, "A")) Rows(i).EntireRow.Delete End If If p = 6 Then Cells(i, "B") = bunrui1 Cells(i, "C") = Trim(Cells(i, "A")) End If End If Next j p1: Next i End Sub ーー 結果 下記のような、データにしないと、後処理がやりにくいのだ。 大分類 小分類 計数 b001  A001 b001  1 c001  A001  c001   1 d002  B001 d002 2 e004  B001 e004 3 J009  B001 J009 4 d002  C001 d002 5 e004  C001 e004 6 J009  C001 J009 7 ピボットで 行ラベル 合計 / 計数 A001 2 b001 1 c001   1 B001 9 d002 2 e004 3 J009  4 C001 18 d002 5 e004 6 J009  7 総計   29 ーー  質問のようなデータに、システム部担当者がもし、したのなら、EUCを行う者に対する、思慮が足りないと思う。

3620313
質問者

補足

修正表を作らないとむつかしい。 →その通りです 「題目」のデータのあり様が詳細が不明 → 失礼しました。半角です 修正表のイメージから、作業列を設定し、下記の様に対応しました。 D1セル:先頭空白文字桁数 E1セル:代表題目 F1セル:グループ D2セル:=LEN(A2)-LEN(SUBSTITUTE(SUBSTITUTE(A2," ","")," ","")) E2セル:=IF(D2=3,SUBSTITUTE(SUBSTITUTE(A2," ","")," ",""),"") F2セル:=IF(AND(D2=3,(SUBSTITUTE(SUBSTITUTE(A2," ","")," ",""))=E2),E2,F1) 2行目の内容を最終行までフィルダウン 以上により 題目     価格   合計 先頭空白文字数 代表題目 グループ  A001        150        3  A001  A001    b001   100           6       A001    c001    50            6      A001   B001        1800       3   B001 B001    d002   300           6       B001    e004   500           6       B001    J009   1000           6       B001

関連するQ&A

  • (エクセル)数値だけ合計したい

    複数のセルに入力されている数値だけを抽出し、合計したいと思います。   A     B    C    D    E    F    G 1 合計金額 金額1  金額1理由 金額2  金額2理由 金額3  金額3理由 2      1000円   菓子  3 1500円  1000円   菓子   500円   飲料 4 1520円  1000円   菓子   500円   飲料   20円   消費税 以上のようにA列に合計金額を計算させる数式を考えています。 (ルール) ・B列とC列、D列とE列、F列とG列はセットです。例えば、B列には入力されているが、C列は空白ということはない ・B列とC列→D列とE列→F列とG列の順に入力されていく ・2行目、3行目のように、常に金額が3つとも入力されているとは限らない ・金額が入力されているB列、D列、F列には、「○○円」と「円」も一緒に入力されている (やりたいこと) A列に合計金額を反映させないのですが、以下のように規制したいです (1)2行目のように、金額が1つだけの場合(B列とC列しか入力されていない場合)は、合計金額は空白セルにする (2)3行目、4行目のように、金額が2つ以上の場合(D列とE列や、F列とG列にも入力されている場合)は、合計金額を反映させる (3)合計金額は「○○円」と「円」も一緒に反映させる (考えたこと) B列の金額とB列+D列+F列の合計を比較し、同じならA列は空白、違う場合はB列+D列+F列の合計をA列に反映させるようIF関数を使えばいいのではないか、と考えました。 そこで、まずB列+D列+F列の合計を出す関数を作ってみたのですが、うまくいきませんでした。 =SUM(SUBSTITUTE(B2,"円","")*1,SUBSTITUTE(D2,"円","")*1,SUBSTITUTE(F2,"円","")*1) とすると、金額が3つとも入力されていればいいですが、一つでも空白セルがあると、#VALUE!とエラーになってしまいます。 SUMPRODUCTを使用してできるかと思いましたが、同じ結果でした。 どうすれば、思っているようになるのでしょうか。 ご存知の方がいましたら教えてください。 よろしくお願いします。

  • 合計金額を出力するマクロについて知りたい

    E・F列は既に入力されています。 下記のようにG列・H列にマクロで出力できるようにしたいのです ■例 ----E-----F-----G-------H 07--名前A --金額---名前A---名前Aの合計金額 08--空白---金額---名前B---名前Bの合計金額 09--名前B --金額---名前C---名前Cの合計金額 10--空白---金額---合計---名前A~名前Cの合計金額 11--空白---金額 12--名前C --金額 13--合計--合計金額 ご教授お願い致しますm(_ _)m

  • エクセルで合計を簡単に出すための方法を教えてください

       |  A  |  B |C| D  |  E   | --+---+---+-+--+----+  1 |     |    金 額    |  時間計| --|名前  +---+-+--+----+    2 |     |○:○○|~|0:00| ○:○○| --+---+--------+----+  3 |     |    金 額    |  時間計| --|名前  +---+-+--+----+    4 |     |○:○○|~|0:00| ○:○○| --+---+--------+----+  ・ |                           |  ・ |       (省   略)            |     ・ |                           |    ・ |                           | --+----+-------+----+ 50 | 合計  |   金額合計  |時間合計| ----------------------------- わかりづらくてすいません。B2-D2=E2となるような式を入力してあり、E2の時間の利用金額がB1という表なんですが、50行目で 金額合計を出す時に=B1+B3+B5+B7+・・・ 時間合計を出す時に=E2+E4+E6+E8+・・・ と入力する以外方法はないんでしょうか?書いてはいませんが、Fの列は時間は出さずに金額だけを表示するのでSUM(F1:F49)で金額合計が出ます。いい方法があれば教えてください。

  • 複数の条件での合計を求める方法

    A列の1から10行まで「○○」と入力し、なおかつ、B列とC列とD列の1から10行まで、「△△」と入力したときのみ、E列の1から10行までに入力された数字の合計を求める方法を教えてください。

  • (Excel関数)条件毎に合計金額を求める

    会員ID4桁(A列)のうち、先頭1桁(LEFT)が会員カテゴリです。 そのカテゴリ毎(1,2,3,4)に合計金額(E列)をだす関数をご教示ください。 *画像参照ください。 よろしくお願いします。

  • 範囲の合計が条件を満たす数を数えたい

       A列    B列   C列   D列 1行  5     3 2行 3行       8 4行  6     4    2 5行  3 60行 上記の様な表で同じ行の各セルの数値の合計 が8以上の行の数を数えたいのです。 (A1+B1+C1+D1が8以上かどうかの以下60行目まで繰り返し) 例では3個 一列ならばCOUNTIF($A$1:$A$60,">=8")でOKなのでしょうが‥ 作業列を用いずに出来ないものでしょうか?お助け下さい。

  • 行を追加した時の、値の合計範囲

    行を追加するマクロがあり、実行すると「合計」行の1行上に行が追加されます。 行が追加された分「合計」のある行が下がっていくんですが、その関数が変動してくれなくて困っています。    A   B   C   D   E   F   G   H   I 1    商品の基本データ ・    ・ ・    ・ 14   商品の基本データ 15 16     日付  入庫  出庫               本日在庫  17 2012/04/01  100                     100 18 2012/04/05  50                      150 19 2012/05/03      100                 50 20 2012/05/04  300                     350 21    ・         150                 200 22    ・          50                 150 23    ・      200                     350 24    ・          10                  340 (ここに行が挿入されていく) 25 合計       (1)   (2)                340(=(1)-(2)) (1)=IF(COUNT($C$17:$C24)=0,"",SUM($C$17:$C24)) (2)=IF(COUNT($D$17:$D24)=0,"",SUM($D$17:$D24)) 現在こんな感じで式を入れています。$C24と$D24が$C25...、$D25...等動いていってくれるといいんですが・・。 他にもSUMPRODUCTやOFFSETなど色々試しましたが、上手くいきません。 行が増えていく(セル参照範囲が変わってくれない)、C:CやD:Dとして設定できない、データが連続していない、などが原因だと思っています。 A列には何もありません。 E~H列は他にもデータが入っています。 マクロで、B17からHの合計の1行上までを日付でソートすることがあります。 合計行の上に空白行C25を入れ、合計行C26にSUM(C17:C25)とし、 挿入する位置を空白行C25の上とすれば、SUMは挿入行を抱えていってくれるんですが、 この場合空白の行25を高さ0の不可視にさせなければならず、利用する側としては21・22・23・24・26と、25が飛んでいるのが気になるものと思います。 できればそういう疑問を持たせることなく可動させたいです。 因みにVBAでWorksheet_ChangeやWorksheet_Selectionhangeなどは既に使用しているので、 マクロで自動で合計値を入力することはできないと思います。 ボタンで動かすマクロでなら出来そうですが、合計を逐一表示するのにマクロボタンを設置するのもどうかと思うので・・。 いくらネットで探しても方法が見つからなかったので、何方かご教授宜しくお願い致します。

  • 合計の出し方

    下記の様な表があるとします。Aには商品名、Bには販売金額(実際は100行位です) C列にはA列から選んだ特定の商品名があります。(実際は50行位です) B列の下方にC列の商品だけの合計を表示させたいのですがどのようにしたら良いでしょうか? ちなみに私の出来る方法では、D列にVLOOKを使い販売金額を検索し、それを合計する方法しか思いつかなかったので、別な方法があれば教えて頂きたいです。  A   B    C りんご  100円  みかん みかん 200円  イチゴ ぶどう  500円  バナナ イチゴ  300円  桃 バナナ  150円  桃    500円 合計  1,150円

  • エクセル 異なる範囲の集計(合計)

    誰かアドバイスをお願いします。 エクセルで下記の様な異なる行数(範囲)を自動集計させたい場合はどうすればよろしいでしょうか?       A      B      C     D        E      日付    注文NO  金額   注文金額計  日別注文金額合計 1   5月1日     1     50     150       250 2                  50       3                  50                4             2    50     100 5                  50                    6   5月2日     3     50     50        150 7             4     50    100 8                   50                                            やりたい事は、D列へ注文金額計に注文NO別の合計金額を集計させる事(注文NOごとの一番上の行のみです。)  と E列へ日別の注文金額合計を集計させる事です。(日別の一番上の行のみに表示)   sumif関数を使えばうまく行きそうなのですが、問題が2つあります。 (1)集計条件の日付や注文NOは、重複している場合は、一行のみ表示の仕様です。(他ファイルからデータを貼りける為、その様な仕様になり、極力入力する事は避けたいです。) (2)合計範囲の行数が一定ではないので出来ればEやD列の全てのセルに関数なりを設置し、一番最上行のみに結果を表字したい。例えばsumif関数をE,D列全ての行に設定してしまうと同じ集計結果が何行にも渡って表示されてしまうのは避けたい。(上の例でいえばE列に150が何行も表示されてしまう。 かといって重複行の最上行のみに関数を設定するのは、一行ずつの作業になってしまう為、避けたい。 何かいい方法がないでしょうか?   個人的には、関数の方がやりやすいのでいいのですが、マクロやVBEでもあれば教えて頂けますでしょうか?

  • エクセルの合計金額の計算について

    C列に金額A、E列に金額Bの数値が複数入力されています。 金額Aにあって金額Bにない場合、金額A列の合計をB列と同じ件数で合計する方法を教えてください。

専門家に質問してみよう