• 締切済み

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

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

みんなの回答

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

 もし、御質問欄の添付画像の様に、「区分」欄に入力されている値が数値データである場合には、まず、各「区分」を入力するセルの書式設定の表示形式を[文字列]に変更してから、再度、区分を入力し直して下さい。 (もし、実際に入力されている区分の名称が、最初から文字列データである場合には上記の操作は不要です)  次に、「区分が入力されている最も下の結合セルであるA15:A16」の1つ下のセルであるA17セルに、「総計」或いは空白スペース等の何らかの文字列を入力して下さい。(数値は不可)  その上で、C2セルに次の関数を入力してから、C2セルをコピーして、C3~C16の範囲に貼り付けて下さい。 =IF($A2="","",SUM($B2:INDEX($B:$B,MATCH("*?",$A3:INDEX($A:$A,ROWS($A:$A)),0)+ROW()-1)))

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.7

回答No.4の追加として次の式を提言します。 =IF(A2="","",SUM(B2:OFFSET(B2,IF(COUNT(A3:A$1000)>0,SUM(MATCH(MIN(A3:A$1000),A$1:A$1000,0),-ROW()-1),1000-ROW()-1),0))) この式は作業用の列を省くためにOFFSET関数で次の集計範囲の先頭を検出してその手前の行までを集計する手法です。 最下の集計区分では次の区分が検出できませんので有効な行の最大値までを集計範囲としています。 上記の式では有効の最大行を1000としていますので実用に合う行数に変更して検証してください。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

>表の書き方が悪かったようで申し訳ないのですが、結合セル部分はA列のみの予定です。 A列だけが結合されているならC2セルに以下の式を入力すれば、右クリックでオートフィルして「書式なしコピー」するだけでご希望の表示になっていると思います。 IF(A2="","",=SUM(B2:INDEX(B:B,MIN(INDEX((A3:A9="")*1000+ROW(A3:A9)-1,)))))

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

マクロにちょっと問題があったので、次の通りに回答を修正します。失礼しました。 ご相談のような事は次のような関数を利用する事で出来ます。 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける public function sumleft(a,b) application.volatile sumleft = application.sum(b.resize(a.mergearea.rows.count, 1)) end function C列の空セルをまとめて選び、 =sumlfet(A2,B2) と記入してコントロールキーを押しながらEnterで一斉入力する。 関数の使い方: =sumleft(A列の計算したい結合セルの先頭セル,対応するB列の先頭セル)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>区分の区切り位置や区分の数は毎回変化しますので、オートフィルをかけてもエラーにならないような式を教えていただけますと、大変助かります。 区分集計用の指標となる値を作業用の列に作成すれば目的に合う集計ができます。 作業用にD列を使う場合 D2=IF(A2="",D1,A2) 区分ごとの合計 C2=IF(A2="","",SUMIF(D2:D16,A2,B2:B16)) D2を下へオートフィルでコピーします。 C2も同様にオートフィルでコピーします。 A列の有効範囲をコピーでクリップボードへ取り込み、C列へ貼り付けオプションの書式のみを指定すれば結合状態と罫線がA列と同じになります。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

例示のレイアウトならオートフィルの操作では無理ですが、以下のようなコピー貼り付けの操作で一括して結合セルに合計値を表示させることができます。 どこかの空白列の2行目に以下の式を入力し、右クリック「コピー」、C列の結合セル範囲全体を選択し、右クリック「形式を選択して貼り付け」で「数式」にチェックを入れて「OK」します。 =SUM($B2:INDEX($B:$B,MIN(INDEX(($A3:$A9="")*1000+ROW($A3:$A9)-1,)))) ただし上記の数式は結合セルが最大7個までですので、それよりも大きいときは適宜$A3:$A9の範囲を大きくしてください。

bouheur
質問者

お礼

ご回答ありがとうございます。 表の書き方が悪かったようで申し訳ないのですが、結合セル部分はA列のみの予定です。 INDEX関数は苦手としておりましたので、大変勉強になりました。 皆さんのご回答を元に、自分でも試行錯誤してみようと思います。

  • suo2k
  • ベストアンサー率44% (183/408)
回答No.2

D列とか使っても大丈夫ですか? まずD2に =IF(A2<>"",B2,D1+B2) と入力し、下へオートフィルします。 次にC2に =IF(A3<>"",D2,"") と入力してこれも下へ。 そいでもってA列の最後の下(画像ではA17)に なんでもいいので何か入れてください。 A17とD列は表示が気になるなら文字色を白にするとか非表示にするとかで対応してください。 あと合計の数値が出てくる位置が若干画像とは異なりますが・・・いいかな?

bouheur
質問者

お礼

ご回答ありがとうございます。 表以外の部分にデータがあっても大丈夫ですので、教えて頂いた方法で何とかできそうです! 質問させて頂いたのはわからなかった部分だけで、実際にはその他の計算もして表示させなければならないのですが、やっとゴールが見えてきました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

そういう計算ができる関数はありません。 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける public function sumleft() with application.caller sumleft = application.sum(.offset(0, -1).resize(.mergearea.rows.count, 1)) end with end function C列の各セルに =sumleft() と記入する。 #C列の空セルをまとめて選び、 =sumlfet() と記入してコントロールキーを押しながらEnterで一斉入力する。 >オートフィルをかけてもエラーにならない 関数以前の問題で、数の異なるバラバラしたセル結合のセル範囲にオートフィルすること自体、出来ません。

bouheur
質問者

お礼

ご回答ありがとうございます。 VBAの使用も考えましたが、利用者全員が理解しやすいようにしたかったのです。関数で利用出来るよう表の形式を変えられないか検討してみます。

関連するQ&A

  • セルに数式が入ってるかどうかを取得する関数は?

    C1には、=SUM(A1:B1) C2には、0 が入力されています。 実際、A1:B1の値は0なので、 C1もC2も0が表示されています。 D列で、ちゃんとC列にsum関数が入ってるか調べてたいのですが =COUNTIF(C1,"*sum*") をオートフィルしても、0が返ります。 C3に「sum」と言う文字列を入れて、=COUNTIF(C3,"*sum*")をしたら 1が返りました。 COUNTIF関数は文字列は認識しますが数式は認識しないようです。 このような場合、セルに数式が入ってるかを取得する方法はありますか?

  • EXCEL関数 合計を60進数で表示するには

    EXCELにて月ごとの残業時間の管理表を作成しようと思っています。 A列は残業開始時刻、B列は終了時刻、C列に残業時間を表示させます。 例えばA-1に18:00と入力し、B-1に19:30と入力すると、C-1に「1.30」と60進数で表示されるまではできました。 行き詰っているのは、セルC-32にその月の合計残業時間を60進数で表示したいのですが、10進数表示になってしまいます。現在はただ単にC-32には、=SUM(C1:C31)と入れているためそうなってしまうのは理解できるのですが、60進数で表示されるにはどうしたらいいのでしょうか? 質問内容がわかりにくい場合は補記いたします。

  • 合計SUM関数のみのこして、他は一括数値変換したい

    よろしくお願いします。 B列に縦に合計SUM関数と、SUM(IF( 関数などいろいろ関数を入れて数字が表示されています。 B列の合計SUM関数は残して、SUM(IF関数・それ以外の関数はをすべて「数値」(関数で現在計算結果として表示されている数値)に変換したいのです。 教えてください。

  • Excelの関数について

    Excelの関数について 私のExcelは2003です。 表を作っていて A列とB列に数値を入れてその合計をC列に自動的に出すようにするのは C列に「=SUM(A3,B3)」と入れますよね? 1日数回のデータを取り A列とB列に数値を入力し 1ヶ月ほどデータを取り続けるので その分C列に入れた関数を下へセルの右下にポインタを合わせて十字の記号を出して 下へ関数を入れたのですが その場合C列には0と表示されますよね? これは防げないものなのですか? 後、そのC列に表示された合計値を 次の行のA列に表示させたいのですが そういう関数はありますか? C列の合計値に次の数を足して、合計値をどんどん増やしていくので 例えばC1の値をそのままA2に表示。 C2の値をそのままA3に表示 C5の値をそのままA6に表示としたいのですが 関数があったら教えてほしいです。

  • sum関数で合計が返らない。

    sum関数で、数値の入ったセルの合計を求めようとしましたところ、なぜか合計が1600とならなければならないところ、0になってしまいます。 数値の入ったセルが数値であること(文字列ではない)は、isnumberで確認をしたのですが、原因がわかりません。 どなたか解決方法をご存じの方がいましたらおしえてください。 excel2010です。

  • EXCEL表の関数の質問です。

    EXCEL表で作った1列の数字の合計をするとき、いつもSUMの関数で合計をしてますが、今回1列のそれぞれのセルに計算式がはいっている(たとえば\180×2=¥360とか)ものや、数字だけ(¥500とか)はいっているものが混在しています。これではSUM関数で合計できません。このセルの表示は会社の指示でそのとうりでしか表示できず困っております。このような列のそれぞれのセルの合計を出すにはどうしたらいいでしょうか。どなたか詳しい方、おしえてください。お願いします。

  • EXCEL関数

    おせわになっておりますm(__)m 先日下記のような質問をここでさせていただきました おかげさまで完璧に解決いたしたのでありますが、 その関数の意味がいまいちわからないのです。 どのように考えればこんな関数が考え付くのでしょうか? 合計を出したいのですが、問題があるのです。 その表はこういうふうに並んでいます。 まずタイトルがあります。 A1 日付 B1ファイル名 C1ファイルのサイズ その下にだーっとデータが並んでいます。 そしてそれは日付ごとに並んでいます。 ファイル名の数はばらばらです。 2つデータがあるときもあれば3つだったり4つだったりします。 データの数さえそろっていれば、D2にでも、SUM関数をいれてオートフィルで合計 値をだせるのですが、 データの数がバラバラなので、 現状だと、手作業で日付ごとに合計しているような状態です。 D列に日付ごとの累計を入れたいのです どうか宜しくお願い致します ちなみに >ファイルサイズの合計です >宜しくお願い致しますm(__)m >もうすでにC列には数値(ファイルサイズ) >がでているので、それぞれ合計すればいいだけです 上記のような質問です。 それで下記のような答えを頂きました (参照失礼致します) D2を選択して、 =IF(A2<>A3,SUMIF(A:A,A2,C:C),"") をコピペして、セルの右下の■を必要なだけ、下方向へ伸ばしてください。 もし、累計が一番最初の行に表示したいのであれば、 =IF(A1<>A2,SUMIF(A:A,A2,C:C),"") でやってみてください。 上記の関数で完璧にできました (arukamunさん、ほんとうにありがとうございます(__)) これはどういうことから導き出しているのでしょうか?

  • Excel2003でif関数を使うとSUM関数で反映されません

    A1セルに金額を入力すると、B1に1と表示させる為に=IF(A1,"1","")といった数式を入れております。 さらにC1にBセルの合計値を表示させる為に=SUM(B1)C2には=SUM(B1:B2)と入力しているのですが、B列のセルにIF関数を使った数字『1』が表示されてもC列セルに反映されないので困っています。 ここで質問ですが、A列セルに金額が入力されるとB列セルに数字『1』が表示され、更にC列セルにB列セルの合計値が表示される様な関数等はありますでしょうか?解り難い説明ですいません。 因みにA、B、C列共に1~31までのセルがあります。

  • EXCEL SUM関数で合計が違う

    以前次のような質問がありました。 QNo.2266177 EXCEL SUM関数で合計値が違う場合 質問者:purepop 教えてください。 EXCELのSUM関数で合計値が違う場合があるのですが、 何が原因で起こるのでしょうか? また、どうすれば直るのでしょうか? ------------------------------------- 私も同じような現象が起こり,困ってしまい,教えてを調べましたが,上の質問には,解決に直接繋がる回答がありませんでした。 ただ,文字列セルは無視されるということです。 ところが,整数だけ入力されてセルが,どうも文字列と認識されているようなのです(セルの表示形式を小数第1位表示の数値にしても,コンマ以下が示されることなく,整数値のままでした)。 それらのセルの値は,他人からカット&ペーストでもらったものです。 数値は,上の入力エリアには,文字列「'3」ではなく,数値「3」と表示されています。 しかたなく,他のセルで当該セル*1をして,値のみ当該セルにコピーすると,小数第1次が0となる,「3.0」と表示でき,合計もただしくなりました。 質問は,このように,「'」がつかない文字列がはいてしまうのはどのようなときでしょうか。  これがわからないと,あぶなくてこまってしまいます。

  • Excel関数:範囲の異なる合計の求め方

    A列に7月の日付が1日から31日まで入力されていて B列には日毎に異なる数値nが入っている表があります。   A   B 1 7/1  5 2 7/2  10 3 7/3  8 4 7/4  2 5 7/5  19     こんな感じで末日まで また、別の表で E列に7/3であったり7/15であったりという日付が入っていて(それぞれバラバラ) F列に、E列のセルの日付から検索してその日以降のB列の値の合計を出したいのです。 E1が7/3であった場合はB3:B31、E2が7/15であった場合はB15:B31、といった具合に。 単に =SUM(B3:B31) と入力するのではなく あくまでE1の値で検索した$B$31までの合計を求める式を教えて下さい。

専門家に質問してみよう