GoogleドキュメントのスプレッドシートでExcelの配列数式を実現する方法

このQ&Aのポイント
  • Googleドキュメントのスプレッドシートにおいて、Excelで使用されている配列数式を実現する方法について教えてください。
  • 数式の適用につまずいている問題があり、参照先の値に特定の条件を満たす場合に値を加算するという処理を行いたいです。
  • アカウントを作成しなくても解決できる方法がある場合には、それを教えていただきたいです。
回答を見る
  • ベストアンサー

GoogleDoc.Spreadsheet配列数式

お世話になります。 GoogleドキュメントのスプレッドシートにMS Excelシートを移植しようとしているのですが 数式の適用に躓いています。   Excel上では  {=SUM(IF((G2:G62<4)*(G2:G62>0),30+IF(R2:R62,1,0),0))}  {=SUM(IF(G2:G62={1,2,3},30+IF(R2:R62,1,0),0))}  (以上Ctrl+Shift+Enterで確定した配列数式)  =SUMPRODUCT((G2:G62>0)*(G2:G62<4)*30+(G2:G62>0)*(G2:G62<4)*(R2:R62>0)*1) などのような数式で求まるのですが、(#自らの数式には頓着してません。) Googleドキュメントのスプレッドシートで同じことを実現する数式が書けなくて困っています。   参照先のG2:G62、R2:R62の値は、数値(非負整数)または空白であることは確実に担保されています。 この条件で、2:62行のそれぞれについて、   G列の値が、1、2、3のいずれか(0より大きく且つ4未満)である場合、     且つ、     R列の値が1以上である(0より大きい)(0や空白ではない)場合は、       31を     それ以外の場合は       30を   (G列の値が、1、2、3のうちのいずれでもない場合は無視(0))   それぞれ加算した合計を求めたい。 以上が「やりたいこと」です。 暫定的に作業セルを設けて計算させているのですが、 実用上、作業セルの存在が編集効率を損ねている実感がある為、 ひとつの数式に纏めたいと考えています(他に理由はありません)。   ここでお願いしていることは具体的な数式のご教示なのですが、 代わりに、例えば、 「GoogleドキュメントのスプレッドシートでMS Excelの配列(CSE)数式や配列定数を実現する方法」 「Googleドキュメントのヘルプを補う解説」 などの日本語ドキュメントをご紹介頂くのも求める回答としては有難いです。   尚、Googleドキュメントを利用するのに必要なアカウントを既にお持ちの方にのみお願いするもので、 新たなID作成を求めるようなものでは決してありませんので、誤解なきよう。   以上、質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

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

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

=sum(arrayformula(if((0<G2:G62)*(G2:G62<4),arrayformula(if(R2:R62>0,31,30))))) で良いかと思います。 グーグルスプレッドシートではCtrl+Shift+Enterのような操作はありませんので,そのまま入力します。

cj_mover
質問者

お礼

ご回答ありがとうございます。 ご教示頂いた数式にて望み通りのことが出来ることを確認しました。 また、MS ExcelにおけるCSE数式に代わる機能としてGoogleDoc.では arrayformula()関数を使うのだということも(ヘルプを引いて)理解できましたので、 今後大いに役立てていけそうです。 今後ともよろしくお願いします。 本件は以上をもって解決とさせていただきます。

関連するQ&A

  • 3千行以上あるExcel表の一つの列を配列数式に

    3千全行以上あるExcel表の一つの列を配列数式にしたいです。 {=SUM(IF(A:A="みかん",B:B,))}のようなやつ。 色々試しましたが、配列数式を使わないと出したい値を出せませんでした。 3千行あるのですが、めちゃくちゃ重くなります。 重くならずに済む方法はありますでしょうか。 やはり配列数式を使うとしょうがないのでしょうか。

  • 配列数式って何ですか??

    きのうは、ある列において偶数行だけの合計を求めたいときの計算式を教えてもらいました。 数式は以下のようになるそうです。 {=SUM(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} (ありがとうございました。) しかし、そこで出てきた「配列数式」というものが何なのか分かりません。上では{}でくくられた部分だという事はわかるのですが、どうして一番初めと終わりに{}があるのか、たとえば比較として、上において{}がない数式ではどのような計算がされてしまうのでしょうか。 また、{}の位置がSUMの後にあるとき、 =SUM{(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} なんかはどんな計算をしていることになるのでしょうか。 配列数式の計算手順がイメージできないのです。 どなたか教えて下さい。

  • 配列数式がわかりません。

    {=SUM(IF(E4:E18="福岡",G4:G18,0))} という式で正しい答えは出せたのですが、SUMのところをaverageに変更し平均を出そうとしても違う答えが返ってきます。 maxに変更したときは正しい答えが返ってきました。使えるものと使えないものがあるのでしょうか??? 配列数式がいまいちわかりません。よろしくお願いします。

  • 配列数式がうまくいきません

    現在、部品の管理をする為に配列数式をたてて行っています。 集計表にのセルに以下のような式が入っています。 {=SUM(IF($M$10:$M$500=200711,IF($S$10:$S$500={10,11},$T$10:$T$500,0)))} M列:客先の希望納期(2007年11月) S列:こちらの納品月(10月、11月) T列:納入数量 今は自分で行っておりますので年が改まった場合などに式(希望納期月)を書き換えておりますが、担当者が変わると配列数式を知らない方が行うこともありえるので、あるセル(A1)を参照する形で式を以下のように変更してみました。 このようにすればA1のセルの部分を変更するだけでいけると考えました。 {=SUM(IF($M$10:$M$500=VALUE(A1)&11,IF($S$10:$S$500={10,11},$T$10:$T$500,0)))} しかしながら、この式ではうまく行きません。 この計算式のどこがまずいのでしょうか。 よろしくお願いいたします。

  • googleドキュメントで配列数式を使う場合に

    http://support.google.com/docs/bin/answer.py?hl=ja&answer=71291 こちらのページで説明がされているのですが、CTRL+SHIFT+ENTERで行う配列数式はgoogleドキュメントではARRAYFORMULAを使い、計算するようなのですが IF(COUNTIF(Sheet2!$A$2:$A$444,$E$59)<ROW(Sheet2!B1),"",INDEX(Sheet2!B$2:B$444,SMALL(IF(Sheet2!$A$2:$A$444=$E$59,ROW(Sheet2!$A$1:$A$443)),ROW(Sheet2!B1)))) というちょっと長い数式になると、どこに入れたらいいか分からなくなりました Sheet1に↑の数式が入れてあり、検索したい値はE59セルに Sheet2には取り出したいデータ A列にデータ(検索用)、B列にデータ1、C列にデータ2とあり、 この数式はA列にあてはまるB列のデータ1全てを取り出すものとなっています。

  • 配列数式について

    A     B 2007/9/1  10 2007/9/2  11 ↓ 2007/9/30  9 上記のように入力されています。 9/1~9/5までの金額を集計します。 配列数式を使用してやって見たのですが うまくいきません。よろしくご指導お願いいたします。 {=sum(if(A2:A31>=2007/9/1)*(A2:A31<=2007/9/6),B2:B31))}

  • 配列数式について教えてください

    ここでエクセルでの文字列の検索方法をさがしていたらさきほど、ちょうど良くこのような配列数式をみつけました。 =IF(A1="","",MIN(IF(ISNA(MATCH("*"&$H$1:$H$9,A1,0)),10,$I$1:$I$9))) A1セルに、H1からH9の表にあるどれかの文字列を含んだ文字列をいれると対応するI1からI9の表の値を表示するものです。 使われているMINやISNAやMATCH関数はわかるつもりですが、組み合わせるとなんでこんなことができるのか、ぜんぜんわかりません。どなたか解説していただけないでしょうか? http://oshiete1.goo.ne.jp/kotaeru.php3?q=653775

  • エクセル配列数式について

    A列(A3:A42)に氏名 B列(B3:B42)に性別 C列(C3:C42)に第1回テスト成績 D列(D3:D42)に第2回テスト成績 が入力してあります。 性別が"男" かつ 第1回テスト成績が350以上 かつ 第2回テスト成績が350以上 の条件を満たす配列数式を {=COUNT(IF((B3:B42="男")*(C3:C42>=350)*(D3:D42>=350),B3:B42,""))} だと正しい回答がでません IFの真の場合の欄をC3:C42またはD3:D42にすると正しい値がでます なぜC3:C42だとだめなのでしょうか?

  • 配列数式での平均値

    こんにちは。 今、エクセルで配列数式を使って平均値を出す作業をしています。 列Aには男女別を示す1、2が入力されており、 列B以降にはいろいろなデータが入っています。 それらデータにおける男女別の平均値を出したいので 配列数式を使って求めるまでは良かったのですが、 どうやら、列B以降の空欄になっているセルも 0として計算されてしまっているようなのです。 (普通のaverageと同様に)空欄を数に入れないで計算させるには どのようにしたらよいのでしょうか? ちなみに今使っている配列数式は、 {=average(if(A1:A10=1,B:B10,""))} です。

  • 配列数式の怪

    お世話になります。 配列数式の入力方法にて解せない部分がありましたのでご教示願います。 ソフトウェア開発の工数見積をしようと思って、Excel2003で添付の様な WBSを作りました。 ここで、機能1~3を実装するか否かをD2~F2に○で指定し、 各機能毎に必要な作業項目をD3~F6でマッピングしました。 ※5は作業対象の工数合計で、 =SUMIF(C3:C6,"○",B3:B6) になっています。 (実際には、機能、作業項目共に数十項目のマトリクスになってます) 各作業項目1~4が見積対象になるかどうかを実装する機能に従って 表示しようと思って、C3~C6に配列数式を使って ※1:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※2:{=IF(SUM(($D$2:$F$2="○")*(D4:F4="○"))>0,"○","")} ※3:{=IF(SUM(($D$2:$F$2="○")*(D5:F5="○"))>0,"○","")} ※4:{=IF(SUM(($D$2:$F$2="○")*(D6:F6="○"))>0,"○","")} と入力しようと思いましたが、どう入力しても下記の様に行番号を可変に したいところが全て同じ行番号になってしまいます。(D3:F3) ※1:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※2:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※3:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ※4:{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} ここで、例えば※2のD3:F3だけをD4:F4に変えても他の行も全てD4:F4に 変わってしまいます。 いろいろと試行錯誤した結果、一旦全て削除してまっさらな状態から ※1に{=IF(SUM(($D$2:$F$2="○")*(D3:F3="○"))>0,"○","")} を入力した後に1行開けて※3にコピーしたところ、無事に D3:F3がD5:F5に変わりました。 そこで、その後に ※2に{=IF(SUM(($D$2:$F$2="○")*(D4:F4="○"))>0,"○","")} を入力した後に※4にコピーして目的を達成できました。 (実際には、奇数行、偶数行でそれぞれ数十行ずつのコピーをしました) これは、配列数式入力時の仕様なのでしょうか? また、本来はどの様に入力するのが正解なのでしょうか?

専門家に質問してみよう