[[20251128084406]] 『関数の書き方』(栗栄太) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『関数の書き方』(栗栄太)

重要案件ではないので申し訳ありません。
気になったので質問させていただきます。

例えば
T1,T2,T3・・・の中に同じ文字列の「あ」の2列右には全テーブルの
「あ」の合計が入るように計算式を作っています。

   A B C D E F G H I J K L M N O P・・・
  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
 1│ T1  │ │ T2  │ │ T3  │ │ T4  │
  ├─┬─┬─┤ ├─┬─┬─┤ ├─┬─┬─┤ ├─┬─┬─┤
 2│あ│ 1│ 5│ │え│ │ 1│ │あ│ 2│ 5│ │お│ │ 6│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 3│い│  │ 0│ │お│ 1│ 6│ │い│ │ 0│ │あ│ 2│ 5│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 4│う│ 5│ 6│ │か│ │ 2│ │え│ 1│ 1│ │か│ 2│ 2│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 5│え│  │ 1│ │さ│ 3│ 3│ │せ│ │ 0│ │う│ 1│ 6│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 6│お│  │ 6│ │き│ │ 0│ │お│ 5│ 6│ │え│ │ 1│
  └─┴─┴─┘ └─┴─┴─┘ └─┴─┴─┘ └─┴─┴─┘
 C1=SUMIF($A$2:$A$6,A2,$B$2:$B$6)+SUMIF($D$2:$D$6,A2,$E$2:$E$6)+・・・
 C2=SUMIF($A$2:$A$6,A3,$B$2:$B$6)+SUMIF($D$2:$D$6,A3,$E$2:$E$6)+・・・
 : :              :
 G2=SUMIF($A$2:$A$6,E2,$B$2:$B$6)+SUMIF($E$2:$E$6,E2,$F$2:$F$6)+・・・
 : :              :

このままでも目的は達成できるのですが
現状ではT1〜T63まであるので
計算式がめちゃくちゃ長くなっているので
もっと簡素化できるような関数とかがあれば、
知っている方は教えてほしいです。

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


 C2セルに
 =MAP(A2:A6,LAMBDA(x,SUM(SUMIF(OFFSET($A$2:$A$6,,SEQUENCE(63,,0,4)),x,OFFSET($B$2:$B$6,,SEQUENCE(63,,0,4))))))
 と入力してC2セルをコピー、それをG2セル、K2セル、O2セル、…に貼付けではどうだろうか?

 なお、2か所のSEQUENCE関数の1番目の引数(63)がテーブルの個数になる。

(ねむねむ) 2025/11/28(金) 09:50:05


=SUMIF($A$2:$M$6,A2:A6,$B$2:$N$6)

範囲と合計範囲はT63まで拡張して下さい。
この式を合計の入る列にコピーでいけるかと思います。

(ひまつぶし) 2025/11/28(金) 10:02:26


 ひまつぶしさん、EXCELのバージョンは何だろうか?
 私のほう(365)では一番最初に試して循環参照が出たため別の方法にしたのだが。
(ねむねむ) 2025/11/28(金) 10:12:03

ねむねむさん
Microsoft365です。
オプションの計算で反復計算を行うにチェックでOKかと思います。
(ひまつぶし) 2025/11/28(金) 10:17:47

 たしかに反復計算をおこなう、で計算された。
 ただ、それも明記しておかないと。
(ねむねむ) 2025/11/28(金) 10:22:23

失礼いたしました。デフォルトでチェックが入っていたので指摘されるまで気づきませんでした。
(ひまつぶし) 2025/11/28(金) 10:23:33

(ひまつぶし)さんへ
(ねむねむ)さんと同様に、循環参照エラーがでました。
オプションの設定で回避することはできました。
[C2]に[=SUMIF($A$2:$M$6,A2:A6,$B$2:$N$6)]を入力すると
[C2]〜[C6] まで合計が表示されました。
[C2]のセルを[G2],[K2]・・・とコピーすればいいのですよね。
ただ、オプションによってできる、できないは避けたいと
思います。

(ねむねむ)さん
上記の場合の動作の確認ができました。
全く問題はない・・のですが
MAP,LAMBDA,OFFSET,SEQUENCE などの関数は使ったことがないので
もう少し理解できるように調べてみます。

ありがとうございました。

(栗栄太) 2025/11/28(金) 10:57:28


少しアレンジしてみました。

   A B C D E F G H I J K L M N O P・・・
  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
 1│ T1  │ │ T2  │ │ T3  │ │ T4  │
  ├─┬─┬─┤ ├─┬─┬─┤ ├─┬─┬─┤ ├─┬─┬─┤
 2│あ│ 1│ 5│ │え│ │ 1│ │あ│ 2│ 5│ │お│ │ 7│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 3│い│  │ 0│ │お│ 2│ 7│ │い│ │ 0│ │あ│ 2│ 5│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 4│う│ 5│ 6│ │か│ │ 2│ │え│ 1│ 1│ │か│ 2│ 2│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 5│え│  │ 1│ │ │  │ 0│ │せ│ │ 0│ │う│ 1│ 6│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 6│お│  │ 6│ │ │ │ 0│ │お│ 5│ 7│ │ │ │ 0│
  └─┴─┴─┘ └─┴─┴─┘ └─┴─┴─┘ └─┴─┴─┘
[A][E][I][M]列で空の場合は[0]ではなく空文字[]にするにはどうすればいいですか
                  ↓↓↓↓
   A B C D E F G H I J K L M N O P・・・
  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
 1│ T1  │ │ T2  │ │ T3  │ │ T4  │
  ├─┬─┬─┤ ├─┬─┬─┤ ├─┬─┬─┤ ├─┬─┬─┤
 2│あ│ 1│ 5│ │え│ │ 1│ │あ│ 2│ 5│ │お│ │ 7│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 3│い│  │ 0│ │お│ 2│ 7│ │い│ │ 0│ │あ│ 2│ 5│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 4│う│ 5│ 6│ │か│ │ 2│ │え│ 1│ 1│ │か│ 2│ 2│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 5│え│  │ 1│ │ │  │ │ │せ│ │ 0│ │う│ 1│ 6│
  ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤ ├─┼─┼─┤
 6│お│  │ 6│ │ │ │ │ │お│ 5│ 7│ │ │ │ │
  └─┴─┴─┘ └─┴─┴─┘ └─┴─┴─┘ └─┴─┴─┘
(栗栄太) 2025/11/28(金) 11:22:41

 =MAP(A2:A6,LAMBDA(x,IF(x="","",SUM(SUMIF(OFFSET($A$2:$A$6,,SEQUENCE(63,,0,4)),x,OFFSET($B$2:$B$6,,SEQUENCE(63,,0,4)))))))

 MAP(A2:A6,LAMBDA(x,…
 部分でA2セルからA6セルを一つずつxで受けているため
 x=""
 でA2:A6の各セルが空白かどうかを確認できる。
(ねむねむ) 2025/11/28(金) 11:31:50

365なので Trim参照を使えばいいんじゃないでしょうか。

C2

 =LAMBDA(対象,LET(
    fx,LAMBDA(n,TOCOL(DROP(FILTER($A:.$ZZ,MOD(SEQUENCE(,COLUMNS($A:.$ZZ),0),4)=n),ROW()-1))),
    MAP(DROP(対象,ROW()-1),LAMBDA(x,SUM((fx(0)=x)*fx(1))))
 ))(A:.A)

後で行列が増えてもいいようにしてみましたが ZZ列を超えるなら範囲を増やしてください。
(d-q-t-p) 2025/11/28(金) 12:13:35


 こんな算式で、2列のみを縦に連結したものを作業列として作るのはどうですか?
 =REDUCE(A2:B6,SEQUENCE(3),LAMBDA(accum,x,VSTACK(accum, OFFSET(A2,0,4*x,5,2))))
 (質問にあったデータを対象にしています。実際には繰り返しの個数などの微修正が必要です。)

 あとは、SUMIF関数を使って合計値を計算する式を元の表に書き込めばよいでしょう。
 (頻出する計算です。)

(xyz) 2025/11/28(金) 14:00:18


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.