[[20260806153201]] 『隣り合ったセルの掛け算を複数列にわたって合計す』(匿名) ページの最後に飛ぶ

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

| 全文検索 | 過去ログ ]

 

『隣り合ったセルの掛け算を複数列にわたって合計する方法』(匿名)

  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

常に入力したセルより左側を参照して計算すればいいってことでしょうか
365の更新プログラムが最新になっている前提で

 =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.