『関数の書き方』(栗栄太)
重要案件ではないので申し訳ありません。
気になったので質問させていただきます。
例えば
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
範囲と合計範囲はT63まで拡張して下さい。
この式を合計の入る列にコピーでいけるかと思います。
(ひまつぶし) 2025/11/28(金) 10:02:26
ひまつぶしさん、EXCELのバージョンは何だろうか? 私のほう(365)では一番最初に試して循環参照が出たため別の方法にしたのだが。 (ねむねむ) 2025/11/28(金) 10:12:03
たしかに反復計算をおこなう、で計算された。 ただ、それも明記しておかないと。 (ねむねむ) 2025/11/28(金) 10:22:23
(ねむねむ)さん
上記の場合の動作の確認ができました。
全く問題はない・・のですが
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
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.