• 締切済み

エクセルで合計欄を結合し、左の複数セルの合計を算出

添付画像のようにC列を合計欄として結合し、 結合したC列に隣り合う、B列の合計を出す場合の操作方法を教えてください。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.13

>同じような表で、B列とC列に数字があり、B列とC列の合計を結合セルのD列に表示させたい場合は、どのようなマクロになるのでしょうか。  一応、マクロも作ってみました。  念の為に、A列やD列に結合されたセルが最初から存在していて、マクロで処理を行った前後で、結合されているセル範囲が変わってしまう様な場合であっても、「結合されていないセル」の水平方向の罫線が消えてしまう事のない様にしております。(そのために行う前処理の部分が、マクロの記述の半分以上を占めてしまう事になってしまいました)  但し、もしも、「A列~C列の列範囲において、空欄ではないセルが存在している行の中の最下段の行」よりも下の行に、結合されているセルが存在していた場合には、その結合されているセルの結合は解除されません。(結合セルの中の一部の行が、「A列~C列の中の空欄ではない最下段の行」と同じかそれよりも上に位置しているものに関しては、結合の解除と、水平罫線の復活は行われます)  又、「結合されているセルが存在しているのはA列とD列だけである」という想定の下でマクロを組んでおりますので、A列とB列にまたがって存在している結合セルやC列とD列にまたがって存在している結合セルが存在していた場合には、結合は解除されますが、垂直方向の罫線や、B列とC列の罫線は復活しません。 Sub Macro0() Dim lr As Long Dim tr As Long Dim br As Long Dim c As String Dim b As Variant lr = 0 If Application.WorksheetFunction.CountIf(Range("A2:A" & Rows.Count), "*?") Then _ lr = Application.WorksheetFunction.Match(Chr(1), Columns("A:A"), -1) If Application.WorksheetFunction.Count(Range("A2:A" & Rows.Count)) Then _ If lr < Application.WorksheetFunction.Match(9E+307, Columns("A:A")) Then _ lr = Application.WorksheetFunction.Match(9E+307, Columns("A:A")) If lr = 0 Then Exit Sub If Application.WorksheetFunction.Count(Range("B2:B" & Rows.Count)) Then _ If lr < Application.WorksheetFunction.Match(9E+307, Columns("B:B")) Then _ lr = Application.WorksheetFunction.Match(9E+307, Columns("B:B")) If Application.WorksheetFunction.Count(Range("C2:C" & Rows.Count)) Then _ If lr < Application.WorksheetFunction.Match(9E+307, Columns("C:C")) Then _ lr = Application.WorksheetFunction.Match(9E+307, Columns("C:C")) If lr = 0 Then Exit Sub c = "" Do If c = "A" Then c = "D" If c = "" Then c = "A" Range(c & "2:" & c & lr).Select Selection.HorizontalAlignment = xlGeneral Selection.VerticalAlignment = xlCenter Set b = Selection.Borders(xlEdgeBottom) Selection.UnMerge With Selection.Borders(xlInsideHorizontal) .LineStyle = b.LineStyle .ColorIndex = b.ColorIndex .Weight = b.Weight End With Loop Until c = "D" Range("D2:D" & Rows.Count).ClearContents 'ここまでが前処理 br = Range("A1").Row Do tr = br + 1 If Application.WorksheetFunction.CountIf(Range("A" & tr + 1 & ":A" & lr + 1), "*?") + _ Application.WorksheetFunction.Count(Range("A" & tr + 1 & ":A" & lr + 1)) Then Do br = br + 1 Loop While Range("A" & br + 1).Value = "" Else br = lr End If If br > tr Then Application.DisplayAlerts = False Range("A" & tr & ":A" & br).Merge Range("D" & tr & ":D" & br).Merge Application.DisplayAlerts = True End If Range("D" & tr).Value = Application.WorksheetFunction.Sum(Range("B" & tr & ":C" & br)) Loop Until br = lr Range("A1").Select End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.12

>数式を下方向にコピーする方法はありませんか? 数式を入力するセルが大きさの異なる結合セルですから、通常のコピー貼り付けはできません。 そこで、特殊な方法となる「数式」でのコピー貼り付けの方法を提示しました。 私の提示した方法で、すべてのセルにまとめてご希望の表示ができると思うのですが・・・・ ちなみに、B列とC列の2つの列の集計なら数式を以下のように変更してください。 =SUM(OFFSET($B2,0,0,MIN(INDEX(($A3:$A11="")*10000+ROW($A3:$A11),))-ROW($A2),2))

5monkeys
質問者

お礼

ご回答ありがとうございます。 出来ました。 前回のご回答が理解できていませんでした。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.11

No.10です。 画像のアップを忘れていました。 どうも失礼しました。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.10

No.3です! 補足の件について・・・ ↓の画像のような感じでよいのでしょうか? そうであればコードを以下に変更してみてください。 Sub 合計2() 'この行から Dim i As Long, k As Long, endRow As Long endRow = Cells(Rows.Count, "B").End(xlUp).Row Application.ScreenUpdating = False Range("A:A").UnMerge For i = 2 To endRow If Cells(i, "A") = "" Then Cells(i, "A") = Cells(i - 1, "A") End If Next i For i = 2 To endRow '↓ココを変更 Cells(i, "D") = WorksheetFunction.SumIf(Range("A:A"), Cells(i, "A"), Range("B:B")) _ + WorksheetFunction.SumIf(Range("A:A"), Cells(i, "A"), Range("C:C")) '↑ここまで変更 Next i Application.DisplayAlerts = False For i = 2 To endRow If Cells(i, "A") = Cells(i - 1, "A") Then k = i Do While Cells(k, "A") = Cells(i, "A") k = k + 1 Loop Range(Cells(i - 1, "A"), Cells(k - 1, "A")).Merge i = k End If Next i Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub 'この行まで これではどうでしょうか?m(_ _)m

5monkeys
質問者

お礼

ご回答ありがとうございます。 簡単にできました。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.9

>同じような表で、B列とC列に数字があり、B列とC列の合計を結合セルのD列に表示させたい場合は、どのようなマクロになるのでしょうか。  回答No.7はマクロによる方法ではなく、関数を使った方法なのですが、マクロによる方法でなければ駄目なのでしょうか?  もし、関数を使った補法でも宜しければ、回答No.6の方法を少し変更した次の様な関数をD列に入力されると良いと思います。 =IF(INDEX($A:$A,ROW())="","",SUM(INDEX($B:$B,ROW()):INDEX($C:$C,IF(COUNTIF(INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),"*?"),MATCH("*?",INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),0)-1+ROW(),ROWS($A:$A)))))

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.8

>「#NAME?」と表示されてしまいます。 >何か操作を間違えているのでしょうか。 えぇ、やり方を間違えているのが原因です。 当たり前の対処だと思いますが、もう一度「回答をよく読みながら、書かれてる通りに行ってください」。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.7

 もし、下の添付画像の様にB列の最後の行に合計値が表示されていて、A列の最後の行に「合計」と表示されている場合や、B列には合計値が表示される様になっていない場合には、次の様な関数を使ってもA列/C列が結合されている範囲内の合計を求める事が出来ます。 =IF(INDEX($A:$A,ROW())="","",SUM(INDEX($B:$B,ROW()):INDEX($B:$B,ROWS(C:C)))-SUM(INDEX(C:C,ROW()+1):INDEX(C:C,ROWS(C:C)))-SUMIF($A:$A,"合計",$B:$B))  但し、この関数は、表のA列において最後の区分の名称が入力されている行の所まで、コピーしておく事で初めて正しい値を表示する事が出来ます。

5monkeys
質問者

お礼

ご回答ありがとうございます。

5monkeys
質問者

補足

同じような表で、B列とC列に数字があり、B列とC列の合計を結合セルのD列に表示させたい場合は、どのようなマクロになるのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 A列に入力されている区分が必ず文字列データである場合には、次の様な関数となります。 =IF(INDEX($A:$A,ROW())="","",SUM(INDEX($B:$B,ROW()):INDEX($B:$B,IF(COUNTIF(INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),"*?"),MATCH("*?",INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),0)-1+ROW(),ROWS($A:$A)))))

5monkeys
質問者

お礼

ご回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

例示のレイアウトなら、空白列の2行目に以下の式を入力し、このセルを選択して右クリック「コピー」、C2セル以下の結合セル範囲を選択して、右クリック「形式を選択して貼り付け」で「数式」にしてください(結合セルが最大10行までの数式です)。 =SUM(OFFSET($B2,0,0,MIN(INDEX(($A3:$A11="")*10000+ROW($A3:$A11),))-ROW($A2),1))

5monkeys
質問者

お礼

ご回答ありがとうございます。

5monkeys
質問者

補足

数式を下方向にコピーする方法はありませんか?

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける public function sumleft() as variant  application.volatile  with application.caller.mergearea   sumleft = application.sum(.offset(0, -1).resize(.rows.count, 1))  end with end function ファイルメニューから終了してエクセルに戻る C列の各セルに =sumleft() と,この通りに記入する。 C列のセルは勿論,「結合されていなくても」計算できます。A列は見てないので,必要なC列セルを漏れなく結合して計算します。 #言わずもがなですが,C列の各セルは「異なるサイズのセル結合」されているため,下向けに数式をコピーして記入するふつーの使い方はできません。

5monkeys
質問者

お礼

ご回答ありがとうございます。

5monkeys
質問者

補足

C列に「=sumleft()」と入力すると、「#NAME?」と表示されてしまいます。 何か操作を間違えているのでしょうか。

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

関連するQ&A

  • マクロで結合セルへの合計額の表示

    B列に月日、C列に氏名、D列に金額、E列は合計額欄の表が有ります。 マクロでC列氏名でソートし、C列で同名の部分はE列でセル結合しています。このE列セル結合のところにD列金額の該当分の合計金額をE列セル結合に表示する記述を教えてください。よろしくお願いします。

  • セル結合部の合計額

    A列に年月日、B列に氏名、C列に金額の表が有ります。 この表をマクロでB列、氏名で並べ替えをし、同名をセル結合しています。セル結合されているのがいくつも有ります。このセル結合された部分のC列の各々の金額の合計をD列に表示する記述を教えてください。 例えば、Aさんでセル結合されたC列のデータが3個有れば三個の合計額をD列に表示するものです。よろしくお願いします。

  • A列が1から始まる連番で、C列を合計欄として結合

    添付画像のようにA列が1から始まる連番で、C列を合計欄として結合し、結合したC列に隣り合う、B列の合計を出す場合のC列の関数を =IF(INDEX($A:$A,ROW())="","",SUM(INDEX($B:$B,ROW()):INDEX($B:$B,IF(COUNTIF(INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),"*?"),MATCH("*?",INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),0)-1+ROW(),ROWS($A:$A))))) とした場合画像の左のように合計が合いません。 画像の右のようにC列を計算するには =IF(INDEX($A:$A,ROW())="","",SUM(INDEX($B:$B,ROW()):INDEX($B:$B,IF(COUNTIF(INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),"*?"),MATCH("*?",INDEX($A:$A,ROW()+1):INDEX($A:$A,ROWS($A:$A)),0)-1+ROW(),ROWS($A:$A))))) をどのように修正すればいいのでしょうか?

  • エクセルのセルの結合について

    恐れいります。 エクセルのセルの結合方法について教えて下さい。 詳細は添付の画像を御覧ください。 3つのセルにそれぞれ、A、B、Cとあるものを一つのセルにA B Cとまとめたいと思っています(半角スペース、あるいは全角スペース) ご存知の方、ご教示いただけますと幸いです。

  • Excel関数で結合セルに合わせて合計を出す方法

    Excelの関数に関する質問です。 画像のような表を作成しており B列の数値を、A列の区分ごとに合計し、C列に表示させる、 という関数がないか探しています。 今のところ、C列にSUM関数を手入力し、 表を作成しているのですが、 C列に関数を入力し、この手間を省けないかと考えています。 C列の表示位置はIF関数等で表示できると考えたのですが、 肝心の数値の合計の方法が分からず、困っています。 結合セルの行番号を求めれば解決するかと調べたのですが、 適切な方法を見つけることができませんでした。 区分の区切り位置や区分の数は毎回変化しますので、 オートフィルをかけてもエラーにならないような式を教えていただけますと、 大変助かります。 宜しくお願い致します。

  • エクセル・単純に合計を出す・・

    表を作っています。 例えばセルを A1~A3,A4~A6,A7~A9 と結合させてそれぞれ数値を入力してます。 B列は結合無しでそれぞれ数値を入力しています。 A+Bの合計をC列に計算させます。 C1に関数を入力して、C2以降はコピーします。 単純に(A1+B1)にすると C1は正しく合計してくれるのですが コピーしたC2は(A2+B1)となってしまい Aが0として計算されてしまいます。 (A$1)と、してしまうと当然ですが C4以降の計算が狂います。 C4は結合されたA4~A6を見てほしいのです。 実際に作っている表は、もっと数が多いので 1つづつ計算では・・・ 何かよい方法はないでしょうか? よろしくお願いします。

  • Excel マクロ 条件によるセルの結合

    テキストだとわかり辛いと思い、 画像を添付させていただきました。 3列の表があり、 A列に1~10までの数字(グループ名)を入力します。 これを、A列の数字が同じ場合、 B列とC列をセル結合したいのですが、 マクロで実現できるでしょうか? (行数は15行くらいあり毎日変わります) (最終行の次の行は空白です) (A列は結合してもしなくても問題ありません) Excel 2007 Windows10を使用しています。 おわかりの方がいらっしゃいましたら、 どうぞよろしくお願い致します。

  • エクセルVBAマクロですこし変わった合計の方法

    添付画像左のように、A列に1~4、4(1)~(3)までナンバーが記入されており、B列C列には数値が含まれているとき、( )が存在している場合のみ( )が存在しないナンバー(例の場合は4)のB列C列に( )があるナンバー(例の場合(1)~(3))の合計を添付画像右がわのように表示させたいとき、どのようなマクロを組めばできますでしょうか。 全てお願いしてしまいますと、コードも長くなってくるのではないかと思われますので、画像では入力シートから表示シートに切り替わっているということですが、入力シートの空白セルへの表示でもかまいません。 ( )つきナンバーのB~後の値を( )なしナンバーのB~後に合計できる方法をお教え頂ければ幸いです。

  • エクセルでセル結合関数

    以下のことをしたいのですが、 難しくてできません。 どなたか教えてください。 a1 b1 c1 a2 b2 c2 a3 a2 a3 (1)a列に「あ」と入力すると b1とc1セルが結合し、結合したセルに「-」が入る (2)a列に「い」と入力すると b列には自由に文字を入れられる c列には「う」が入る (3)a列にそれ以外がはいるとブランク (1)かつ(2)かつ(3)のことをしたいです。 おそらくc列に =if(a="あ",[b列セルとc列セルを結合した後、-を入力],if(a="い","う","")) だと思うのですが、 [b列セルとc列セルを結合した後、-を入力] がわかりません。 よろしくおねがいします。

  • エクセルで複数の条件のセル数をそれぞれ合計したい

    エクセルで複数条件のセルにそれぞれ分類を分け(判定)、分類ごとにセル数の合計を出したいのですが、この場合のセル合計を簡単に計算する条件式はないでしょうか?(分類項目はIF、AND関数を使って結果表示しています) 例)C列に分類AとBが0の時"*"、Aが1・Bが0の時"2"、ABとも1の時"1"、ABとも空欄の時空欄" "と判定し、"*"・"2"・"1"それぞれのセル数を合計したいのですが・・・。   列 A B C      行 1  0 0 *    2  1 0 2    3  1 1 1    4     ・        ・ どなたかご教示よろしくお願いします。

専門家に質問してみよう