• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Arrayformula関数について)

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

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答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スプレッドシートで配列を使って処理し高速化したいのですが、うまくいかなくて苦心中といったところです、、