『隣り合ったセルの掛け算を複数列にわたって合計する方法』(匿名)
B列 C列 D列 E列 F列 G列 H列 I列 ・・ N列 P列 1 Opt1 Opt2 Opt3 2 数量 単品単価 数量 単価 数量 単価 数量 単価 ・・ Set単価 金額 3 5 30,000 1 500 2 200 ・・ 30,900 154,500 4 6 32,000 3 200 5 50 ・・ 32,850 197,100 ・ ・ ・
Optはオプションの意味です。
1行目のOptのところは、D列とE列で結合、F列とG列で結合、H列とI列で結合となっています。
実際は、Option1〜Option20くらいまであります。
1行目、2行目はヘッダ部で3行目からがデータ部になります。
現在N3セルには、「=C3+D3*E3+F3*G3+H3*I3」という数式が入っています。
しかし、オプションを増やす(例えば、D列とE列をコピー、F列を選択してコピーした列の挿入)と
Set単価の数式を変えなければなりません。
また、オプション部分がない場合非表示にしたりしています。
上記の例の場合、J列とK列にOpt4、L列とM列にOpt5があるけれど非表示にしています。
必要なオプションを追加した場合などに、N3の数式を変え忘れてしまう恐れがあります。
D列からI列の範囲(D列〜I列)を選択することで、
オプション部分の数量×単価を計算してほしいのですが、
Excelのワークシート関数で、このような計算をしてくれるものがあるのでしょうか。
ご存じの方いらっしゃいましたら教えていただけると幸いです。
よろしくお願いいたします。
今回はなるべくVBAを使いたくないですが、
VBAを使うのであれば、以下のように対応しようと考えています。
社内でオリジナルに使えるとよいようなワークシート関数を自作し、
以下のファイルにまとめて、必要な人に共有するという考え方です。
ファイル名:WS関数.xlam
Public Function SelectOptions(rng As Range)
Dim r As Range
Dim ret
Dim i As Long
On Error GoTo Err_Exit
i = 1
For Each r In rng
If i Mod 2 <> 0 Then
ret = ret + (r.Value * r.Offset(0, 1).Value)
End If
i = i + 1
Next r
SelectOptions = (ret + Cells(rng.Row, "C").Value) * Cells(rng.Row, "B").Value
Exit Function
Err_Exit:
SelectOptions = "Error"
End Function
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
=WRAPCOLS(D3:I3,2) とすると 1 2 500 200 の様に2行になりますね
TAKE(WRAPCOLS(D3:I3,2),1) と TAKE(WRAPCOLS(D3:I3,2),-1) の SUMPRODUCT が計算できればいいので、
=LET(wc,WRAPCOLS(D3:I3,2),SUMPRODUCT(TAKE(wc,1),TAKE(wc,-1))) ということではないでしょうか? (´・ω・`) 2026/08/06(木) 16:34:40
表示・非表示があるので、対象のものだけ選択するという意図かと思いました。 どうやら違うようなので消去しました。 (xyz) 2026/08/06(木) 16:44:33
=LAMBDA(範囲,LET(
数量,INDEX(範囲,,1),
Set単価,BYROW(範囲,LAMBDA(x,LET(
単品単価,INDEX(x,,2),
数量×単価,BYROW(WRAPROWS(DROP(x,,2),2),PRODUCT),
SUM(単品単価,数量×単価)
))),
HSTACK(Set単価,Set単価*数量)
))(TRIMRANGE(DROP(TAKE(1:1048576,,COLUMN()-1),ROW()-1,1),2,0))
(d-q-t-p) 2026/08/06(木) 16:51:02
以下でできました。
=LET(wc,WRAPCOLS(D3:I3,2),SUMPRODUCT(TAKE(wc,1),TAKE(wc,-1)))+C3
(xyz)様
ご回答してくださったようでありがとうございます。
(d-q-t-p)様
ご回答ありがとうございます。
LAMBDA関数が理解できず、
これから時間をかけて理解していこうと思います。
ご協力くださった方、本当にありがとうございました。
なにぶん、ExcelはほぼVBAでやってきてしまったので、
ワークシート関数がまだまだ勉強不足です。
頭が悪いので理解することに時間がかかると思いますが、
ご回答については、今後勉強していきます。
つまづいた時には、また、ご質問させていただくこともあるかと思います。
その時は、よろしくお願いいたします。
(匿名) 2026/08/06(木) 18:06:58
古い手段なら... ^^;
[N3] =SUMPRODUCT($D3:INDEX(3:3,COLUMN()-2)*ISEVEN(COLUMN($D3:INDEX(3:3,COLUMN()-2))),$E3:INDEX(3:3,COLUMN()-1)*ISODD(COLUMN($E3:INDEX(3:3,COLUMN()-1))))
(白茶) 2026/08/06(木) 18:16:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.