GoogleスプレッドシートでArrayformula関数とsumifs関数を使って売上額を集計する方法

このQ&Aのポイント
  • Googleスプレッドシートで(1)表のデータから(2)表を作成し、社名と商品の組み合わせでsumifs関数を使用して売上額を集計する方法について教えてください。
  • 現在、SUMIFS関数とコピー貼り付けを使用して売上額を集計していますが、レスポンスが遅いため、ARRAYFORMULA関数を使用して時間を節約したいと考えています。
  • しかし、ARRAYFORMULA関数とSUMIFSの組み合わせがうまくいかず、途中の小計で「循環参照しています」というエラーが発生しています。どなたか解決方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

Arrayformula関数について

Googleスプレッドシートで、Arrayformula関数とsumifs関数を用いて計算をしたいのですが、エラーになってしまってうまくいきません。どなたか教えていただけると助かります。     (1)表              (2)表  A   B    C       A   B   C 1社名 商品   売上     1社名  商品  売上 2A社 りんご  100     2A社 りんご  100 3B社 りんご  100     3A社 バナナ   70 4A社 バナナ   70   ⇒  4A社 メロン    0 5C社 メロン  200     5    計   170 6C社 バナナ   70      6B社 りんご  300 7A社 りんご  200      7B社  バナナ    0                 8B社 メロン    0                 9    計     300                 10C社 りんご    0                 11C社 バナナ   70                 12C社 メロン  200                 13    計    270 (1)表のデータから(2)表を作るのですが、社名と商品の組合せでsumifs関数で(2)表の条件を絞り込み、売上額を集計しています。そしてさらに各社ごとに小計を求め、それぞれの会社ごとの集計を入れています。 それまでは、(2)表のA列・B列は固定で、C列の売上については =SUMIFS('(1)表'!$C$2:$C$7,'(1)表'!$A$2:$A$7,$A2,'(1)表'!$B$2:$B$7,$B2)とし、 小計の欄(C5)には =SUM(C2:C4)と入れて、それを最下段までコピーしておりました。 今それだとレスポンスが非常に遅くなるために、ARRAYFORMULA関数を使って、時間削減を図りたく考えているのですが、難点が二つあり、ARRAYFORMULAとSUMIFSの組合せがうまくいかないのと、途中の小計がどうしても「循環参照しています」となってしまうことです。 色々調べておるのですが、どうしてもうまくいかず、お手上げ状態です。 どなたか詳しい方いらっしゃったら教えていただきたいです。 よろしくお願いします。

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

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

グ―グルのスプレッドシートを、よく知らないものだが 下記を一読してみてください。 私の心配する点は、会社名+商品名の組み合わせは、手入力をして作るのでしょうか。 中間に出てくる(質問では、「途中の小計」と言っている行)会社別合計の行も手作業で設けるのですか。そして、そのセルの式も(式複写でなく) 個別に手で入れるのですか。 それなら、あとは関数式だけの問題になるが。 ーー とりあえずエクセルの話での説明になるが、 下記のデータがあるとします A1:C13 社名 商品 売上 A社 バナナ 70 A社 メロン 200 A社 りんご 100 A社 りんご 200 B社 バナナ 100 B社 メロン 101 B社 りんご 100 C社 バナナ 70 C社 メロン 200 C社 りんご 200 C社 バナナ 100 B社 メロン 200 ーー これを所望の A社 バナナ 70 A社 メロン 200 A社 りんご 300 B社 バナナ 100 B社 メロン 301 B社 りんご 100 C社 バナナ 170 C社 メロン 200 C社 りんご 200 という表を作るとします。 これでも相当むつかしいです。 ーーー まして、たとえばA社の商品の明細の最終の次行に 社別合計を挟むのは式の複写を利用するスプレッド、シートでの関数ではむつかしいと思いますが、グーグルでは、どうしてますか。 社名  商品  売上 A社 りんご  100    A社 バナナ   70  A社 メロン    0        計       170 各社の社名1つまたは毎行や商品名は文字列で、 シートの適当なところに、手入力するのでしょうか? データ数が多く商品、会社のバラエティが多いと、 手数が、大変ですが、どうしてますか。 ーー 私のエクセルでの、方法の場合 社名 商品 売上 結合文字列 結合文字列 A社 バナナ 70 A社 バナナ A社 バナナ 70 A社 メロン 200 A社 メロン A社 メロン 200 A社 りんご 100 A社 りんご A社 りんご 300 A社 りんご 200 A社 りんご B社 バナナ 100 B社 バナナ 100 B社 バナナ B社 メロン 301 B社 メロン 101 B社 メロン B社 りんご 100 B社 りんご 100 B社 りんご C社 バナナ 170 C社 バナナ 70 C社 バナナ C社 メロン 200 C社 メロン 200 C社 メロン C社 りんご 200 C社 りんご 200 C社 りんご C社 バナナ 100 C社 バナナ B社 メロン 200 B社 メロン D列の結合文字列は 式=A2&" "&B2 E,F列はD列を「区切り位置」で「スペースをもとに2列に、社名と商品名に分割した。 そしてG列は関数式=SUMIFS()を入れて、G2セルは =SUMIFS(C$2:C$13,$A$2:$A$13,E2,B$2:B$13,F2) このサンプルでは、データ行数が少ないので、下方向に式を複写した。 会社別の合計は出してない。 (A)データ行数が多いと、シート上で、式の複写の手数も煩わしい。 これを解決してくれるのが、GoogleのARRYFORMULA関数 と思うが、どうだろう。 (B)それとエクセルにもある、配列数式の機能も併せて、ARRYFORMULA関数では、実現できる、優れたものと思う。 ーー 私の方法では、関数のほかに、会社名、商品名の組を出すために、 (1)文字列結合 (2)重複のない、会社名+商品名の組み合わせを出すために、 フィルターの「重複するレコードは無視する」を使う。 (3)「区切り位置」の エクセルの操作で、社名と商品名を別列に分離、している。 (4)同じ社名分を、まとめるために、並べ替えを使っている。 グーグルのスプレッドにおいて、(4)以外のこういう機能はあるでしょうか? もし無ければ、関数だけでそれを実現するのは複雑になるでしょう。 どうしていますか。

yuttama
質問者

お礼

お返事ありがとうございます。 「社名」と「商品名」は固定の集計表なので、表として固定のため手打ちで作っています。 なので月度の売上の状況如何に関わらず同じ種類で固定しています。質問の(1)表は月によって違いますが、(2)表のフォーマットは売上の額以外は、社名も会社数も商品名も商品種類の数もずっと同じです。質問のサンプルだと、全部で13行だけですが、この通りです。また、会社と会社の区切りには「会社計(小計)」が必要です。元々エクセルで作っていた表で、質問の欄にあるような式で作っていました。 =SUMIFS('(1)表'!$C$2:$C$7,'(1)表'!$A$2:$A$7,$A2,'(1)表'!$B$2:$B$7,$B2) =SUMIFS('(1)表'!$C$2:$C$7,'(1)表'!$A$2:$A$7,$A3,'(1)表'!$B$2:$B$7,$B3) =SUMIFS('(1)表'!$C$2:$C$7,'(1)表'!$A$2:$A$7,$A4,'(1)表'!$B$2:$B$7,$B4) =SUM(C2:C4) の4行をセットで、C5以下のセルに複写していました。 なので以下のような感じです。 =SUMIFS('(1)表'!$C$2:$C$7,'(1)表'!$A$2:$A$7,$A5,'(1)表'!$B$2:$B$7,$B5) =SUMIFS('(1)表'!$C$2:$C$7,'(1)表'!$A$2:$A$7,$A6,'(1)表'!$B$2:$B$7,$B6) =SUMIFS('(1)表'!$C$2:$C$7,'(1)表'!$A$2:$A$7,$A7,'(1)表'!$B$2:$B$7,$B7) =SUM(C5:C7) という感じで、最後の行は =SUM(C10:C13) です。 これらの処理をGoogleスプレッドシートで配列を使って処理し高速化したいのですが、うまくいかなくて苦心中といったところです、、

関連するQ&A

  • excel関数 間違ったデータをピックアップしたい

    列Aの各セルに、みかn、りんご、バナナ、メロンなどと入っていて、列Bの各セルは、"A"~"F"の人気ランクが入っています。 列A   列B   みかん  A りんご  C バナナ  D みかん  A メロン  C 列C以降にはその他の色々なデータが入っていますが、それはさておき、列AとBだけの関係を見ると、みかんは必ず"A"、りんごは必ず"C"というように、果物別の評価は決まっているはずです。ところが、間違って入力されて、ある行ではみかんが"A"で、別の行ではみかんが"C"だったりしたら、調べて正しい方に統一したいのです。 そこで、ひとつの果物に対応する評価が複数あるものをピックアップしたいのですが、どうすればいいでしょうか。そのほかの集計作業に関数を使っているので、これも関数で出来ればいいかなと思うのですが。

  • EXCEL:抽出・シートに分散させる方法

    下記の様なデータを元に、各担当者別に用意された売り上げ表の雛形に表示させたい(指定した項目を指定したセルに)のですが、 実現出来る関数はありますでしょうか? オートフィルタ>コピペではなく、毎月の処理になるので自動的に出来る様にしたいのですが。 顧客名  担当者  商品名  金額 A社   佐藤   バナナ  100 B社   鈴木   バナナ  100 C社   田中   メロン  100 A社   佐藤   バナナ  300 A社   佐藤   リンゴ  200 C社   田中   メロン  100 これを↓ Sheet 佐藤 顧客名  商品名  金額 A社   バナナ  100 A社   バナナ  300 A社   リンゴ  200 ------------------ Sheet 鈴木 顧客名  商品名  金額 B社   バナナ  100 ------------------ Sheet 田中 顧客名  商品名  金額 C社   メロン  100 C社   メロン  100 よろしくお願いします。

  • [関数] 集計用の関数についてご教示ください

    こちらの識者の方々にはいつもお世話になっています。 関数の質問です。 環境は下記になります。 OS=windows7 pro 64bit Office=Excel2010(14.0.7128.5000) ・やりたいこと 図のようなリスト(A3:G7)があり、りんごやバナナなどの項目ごとに誰がいくつか集計したい(A11:C14) B12:C14の範囲に関数を入力して数字を導き出したいのですが、 その際の関数の範囲はA4:G7を指定したいのです。 (りんごの列の関数の範囲はA4:G5、ばななの列の関数の範囲はA6:G7という風に分けたくない) Aに1列追加して A4=りんご担当 A5=りんご個数 というような集計用の列を作成することは可能です。 このような場合どのような関数を使えばよいでしょうか? もし可能であれば集計用の列を追加した場合としない場合、両方の関数を教えていただければ幸甚です。 (集計用の列をどのような値にするかも併せて教えていただけますでしょうか) 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • 【Excel】データベース関数

    B列が0以外の商品名と個数が、C列D列に自動的に出てくるようにしたいです。 何関数を使うのが適切でしょうか??宜しくお願いいたします。 A列   B列  C列   D列 エノキ  0個  バナナ  8個 バナナ  8個  りんご  5個   りんご  5個 なすび  0個

  • エクセルの関数について

    エクセルの関数について 【Sheet1】 B列・・・J列 売上日  商品名 9/12   りんご 9/12   みかん 9/12   りんご 9/14   りんご という売上表があったとして、Sheet2にJ列の項目ごとに売上日を表示できる数式を教えていただきたいです。こんな↓イメージです。 【Sheet2】 A列・・B列・・・C列・・・・ 商品名 売上日1 売上日2・・・売上日31 りんご 9/12  9/14 【Sheet1】の売上表は、売上が立つごとに入力していく表なので、 一日に同じ商品名(J列)が何度もでてきますが、同一売上日は、1回だけの表示にしたいです。 売上表は月でしめるので、毎日売れたとして、売上日は最大31日です。 【Sheet1】の売上表は、パソコンの苦手なパートの方が作成しているので、いじりたくありません。 当方あまりパソコンが得意ではないため、説明が分かりにくくて申し訳ないのですが、よろしくお願いします。

  • Excel 関数 照合した結果がどこにあるのか表示したいのですが

    照合したいデータがあります。 A列とB列のセルを照合の結果、B列のセルがA列のどこにあるか、C列に行番号を表示したいのですが。 どのような関数がいいのか教えてください。よろしくお願いします。   A列   B列   C列 1 リンゴ みかん  2 2 みかん いちご  4 3 バナナ レモン  6 4 いちご メロン  5 5 メロン ぶどう  × 6 レモン

  • エクセルの関数について

      Å      B       C 1 Aさん    りんご     0 2        バナナ      2 3        パイナップル  0 4 Bさん    りんご     2 5        バナナ      4 6        パイナップル  2 7 Cさん    りんご     0 8        バナナ      0 9        パイナップル  5 10Dさん    りんご     3 11       バナナ      2 12       パイナップル  4 というエクセルの表で、りんご、バナナ、パイナップルをそれぞれ何人が買ったかを出したいのですがどうすればよいか教えて下さい。(この表の場合、りんご2、バナナ3、パイナップル3と出てくるようにしたいです。)商品の並び方は全員一緒です。よろしくお願いいたします。

  • 関数で困ってます

    パソコン初心者なので難しいことは分からないですが・・・ Bのシートに  A列         B列      C列 品名        支店番号     個数  りんご       2           10 みかん       2           3 バナナ       1          7 バナナ       2          1 メロン       1          2 が入っています。 Aのシートにて、品名がバナナで、なおかつ支店番号が1の場合のみ、Bのシートの個数を返す という式を作りたいのですが うまく出来ません 説明が下手で分かりにくいと思いますが、分かる方がいらしたら教えてください。   

  • エクセルの関数を使って・・・

    まず 氏名 商品B 商品A 商品C 売り上げ数 山田 2000    0  500  2500 山田 500   100   100  700 河合 100   100   100  300 田中 500           500 山中 500           500 と続いていく簡単な売り上げの表があります。 氏名のところは入力規制でリストから選択できるようにしています。 この表を集計して    商品B 商品A 商品C 山田 3000   100  600 河合 田中 山中  このような集計表に個人別の商品別総計を出すように関数 入れたいのですが何卒よろしくお願いします。

  • Excelで困ってます。

    会社で売上表を作って集計をしていますが、どうもうまくいきません。 どなたかお教えいただけないでしょうか? 売上表はこんな感じです。 A列に売上げ商品の一覧があります。 (例えば、りんご・みかん・メロン・りんご・桃・・・みたいな感じで100個ぐらい) もちろん同じ商品の重複もございます。 別シートに特定の商品リストがあります。 (例えば、りんご・みかんみたいな) 集計としましては、その日の売上商品の中で、別シートのリスト(上記の場合はりんごとみかん)と同じ商品だけを抽出し、その商品の隣の列(たとえばこの場合はB列)に「○」と表示させたいのです。 特に合計数を集計したいわけではありません。ただ○をつけたいだけです。 B1に試した関数は =IF(A1=シート2!$A$1:$A$2,"○","") です。 (この場合、シート2のA1からA2に特定商品のリストがあるとします) この関数だとエラーが出てしまいます。 マクロなどを使わずに、関数で解決できないでしょうか? よろしくお願いいたします。

専門家に質問してみよう