
お世話になっております。
掲題の通り、飛び飛びのセルを計算しているIF条件があります。
具体式は以下
=ARRAYFORMULA(IF($H$9:$H$608=BR8,$G$9:$G$608,"")+IF($K$9:$K$608=BR8,$J$9:$J$608,"")+IF($N$9:$N$608=BR8,$M$9:$M$608,"")+IF($Q$9:$Q$608=BR8,$P$9:$P$608,"")+IF($T$9:$T$608=BR8,$S$9:$S$608,"")+IF($X$9:$X$608=BR8,$W$9:$W$608,"")+IF($AB$9:$AB$608=BR8,$AA$9:$AA$608,"")+IF($AF$9:$AF$608=BR8,$AE$9:$AE$608,"")+IF($AJ$9:$AJ$608=BR8,$AI$9:$AI$608,"")+IF($AN$9:$AN$608=BR8,$AM$9:$AM$608,"")+IF($AR$9:$AR$608=BR8,$AQ$9:$AQ$608,"")+IF($AV$9:$AV$608=BR8,$AU$9:$AU$608,"")+IF($AZ$9:$AZ$608=BR8,$AY$9:$AY$608,"")+IF($BD$9:$BD$608=BR8,$BC$9:$BC$608,"")+IF($BH$9:$BH$608=BR8,$BG$9:$BG$608,"")+IF($BL$9:$BL$608=BR8,$BK$9:$BK$608,"")+IF($BP$9:$BP$608=BR8,$BO$9:$BO$608,""))
【やりたいこと】
以下のようなセルが複数個所にあります。
漢検第1回 漢検第2回 第三回…続く
受験日 受験級 預り金額 受取月
日付 2級 2000円 3月
具体的には検定各種+回数のセルが横並びになっている状態で、受取月(受験日と異なる場合があります)を参照して、預り金を別の受取計算式セルにSUMしたい、といった状態です。
計算自体は上手くいっているのですが、全体シートの重さから考えて、もう少し短い式にしたいです。
このような式をもう少し短くする方法はありませんでしょうか?
有識者の方いらっしゃいましたらよろしくお願いします。
どのあたりの関数を使った方がいいよ~などありましたらヒントをいただけるとこちらでこねくり回せたりするので、関数のヒントだけでも構いません。(具体式だとめんどくさそうなのは明らかなので…)
スプレッドシートの投稿カテゴリがありませんので、エクセルカテゴリで出題させていただいております。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは
スプレッドシートの関数は全く知らないのと、今、手元にエクセル環境がないので確認ができませんので、以下アイデアだけの回答になってしまいますが・・・
>第三回…続く
となっている列のセットがいくつあるのか不明ですが、少ない数であるなら、各セット毎の集計を加算するのが簡単そうに思えます。
例えば、最初のセットがA~D列として、D列を条件にC列の和を求めるなら、
SUMPRODUCT((D:D=指定月)*C:C)
のような計算で得られますので、これをセットの数だけ連記して加算すれば良いことになります。
しかし、ご提示の式を見てみると、どうやら同じ考え方の式のようにも思えますので、セット数が多いのでこれを何とかしたいというご質問なのでしょうか?
式を簡単にするだけであれば、上記の式をセット数分(列方向に)一般化することで可能と考えられます。
エクセルの場合でも、配列計算の場合、2次元に対応してくれる関数とそうでないものがあるので、確認しないとどのような関数を選択するのが良いのかはっきりとしないのですが・・・
例えば、対象範囲がA1:P100とするなら
SUM((MOD(COLUMN(D1:P100),4)=0)*(D1:P100=指定月)*C1:O100)
のような式(使用関数は変わるかも知れません)で算出できると思います。
簡単に説明するなら、4の倍数列でかつ指定月と同じセルの左隣の値を合計するという意味です。(条件に合致しないセルの場合は値が0を返す)
これにより、計算式自体はかなり短く簡潔にできるとは思いますが、計算が軽くなるかと言えば、むしろ逆効果となる可能性が高いです。
大抵の場合、式を一般化するほど計算量が増加する傾向にあり、無駄な計算が増加するからです。
計算効率を下げずに、かつ、式を簡略化したいのであれば、エクセルで言うところのユーザ関数的なものを作成して、それを利用する方法があったように思います。(確信がありませんが、できたような記憶があります)
スプレッドシートの制御はjavascriptで可能なはずですので、専用の関数を(効率よく)作成しておいてこれを利用する方式にしておけば、セル内の式も関数呼びだしだけの短い式ですむはずです。
No.2
- 回答日時:
[No.1補足]へのコメント、
「各列の項目名は、受験日、受験級、預り金額、受取月の5種類が横方向に隙間なく並んでいると」として(何故なら私のその問に対する回答なしだったから。ただし、「5種類」は「4種類」の間違いでした)、かつ、「列G」が「預り金」額なら、列記号は此処の添つまり、「列G、列J、列M…の項目名は預り金」と仰ったのはデタラメでしょ?
なのに、提示された式が「計算自体は上手くいっている」のはアリエナーイ筈では?

No.1
- 回答日時:
確認させてください。
各列の項目名は、受験日、受験級、預り金額、受取月の5種類が横方向に隙間なく並んでいると?
列G、列J、列M、… の項目名は何ですか?
列H、列K、列N、… の項目名は何ですか?
セル BR8 のデータは何ですか?
Excel での手法で回答したら、貴方はそれを“スプレ”に応用できますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- ノートパソコン パソコン(windows11)とICカードリーダ(IC-608)でマイナンバーカードのアクセスをして 2 2023/04/06 13:17
- PHP PHP MySql ページング 2 2022/09/20 06:38
- ノートパソコン パソコン(windows11)とICカードリーダ(IC-608)でマイナンバーカードのアクセスをして 1 2023/04/06 13:26
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Excel(エクセル) Excelで睡眠時間をもとに判定したい 6 2022/08/19 13:47
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】元データと同じお客...
-
エクセルの複雑なシフト表から...
-
【画像あり】オートフィルター...
-
【マクロ】【相談】Excelブック...
-
【マクロ】変数に入れるコード...
-
【マクロ】別ファイルへマクロ...
-
エクセルシートの見出しの文字...
-
【マクロ】数式を入力したい。...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
【マクロ】左のブックと右のブ...
-
Amazonでマイクロソフトオフィ...
-
エクセルのVBAで集計をしたい
-
エクセル GROUPBY関数について...
-
【マクロ】オートフィルターの...
-
【マクロ】列を折りたたみ非表...
-
ページが変なふうに切れる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報
一緒に考えて下さりありがとうございます。
補足しますと
列G、列J、列M…の項目名は預り金です。受取月で横に足し算をしています。
列H、列K、列N…の項目名は受取月です。(ここを後述のBR8のデータで集計して各月の合計としています)
セルBR8のデータは別テーブルの受取月です。別テーブルがあり、受取月ごとに集計されます。
Excelの手法でも構いません。
もしかしたらスプレッドシートに実装されていない可能性もありますが、試してみる価値はあると思います。
補足が分かりづらいようでしたので再補足です。
受験日(F列) 預り金(G列) 受取月(H列)…
と並んでいるのが5種類、
受験日(U列) 受験級(V列) 預り金(W列) 受取月(X列)…
と並んでいるのが3種×3種類です。
また、各受取月の計算式合計として
3月(BR列) 4月(BS列)……
としてテーブルを用意しています。
計算式用受取月(BR列:3月)を参照してH列などを見に行き、左隣にあるG列などを取ってくるIF文を一つずつ書きました。計算式用受取月と一致しない場合は空欄を返して、それぞれのIF文を足し算しているのが質問に書いた実例の式です。
ですので、うまくいってないのがあり得ない、という回答自体があり得ないのですが…
Excel上では動かない式なのでしょうか?グーグルスプレッドシートでは動いています。
この記事の趣旨は「動くかどうか」ではなく「省略できるかどうか」です。
アイデアありがとうございます!
ExcelでいうところのVBA、スプレッドシートでいうところのGASですね。
私も少しその方面で考えていました。
アイデアをもとにいろいろ弄ってみます!