6

4つの異なるグループ用の合計データセットがあります。値の1つは平均時間で、もう1つはカウントです。合計の場合、これらを乗算してから、カウントの合計で除算する必要があります。現在私が使用しているもの:

=SUM(D32*D2,D94*D64,D156*D126,D218*D188)/SUM(D32,D94,D156,D218)

読みやすくするために、SumProductを使用したいと思います。私がやろうとした:

=SUMPRODUCT((D2,D64,D126,D188),(D32,D94,D156,D218))/SUM(D32,94,D156,D218)

しかし、ここでの私の投稿からわかるように、それはうまくいきませんでした。私が望むようにSumProductを実行する方法はありますか?

4

4 に答える 4

8

「見事なExcel-fuで可能かもしれませんが、それができたとしても、元のソリューションよりも読みやすくなる可能性は低い」というコメントに同意します。

CHOOSE()考えられる解決策は、関数を自分の中に埋め込むことですSUMPRODUCT(このトリックは、実際にはvlookup、条件付き最大値の検索などに非常に便利です)。

例:データに8つの観測値があり、2つの列(列BとC)にあるが、一部の観測値を含めたくないとします(4行目と5行目の観測値を除外します)。次に、SUMPRODUCTコードは次のようになります...

=SUMPRODUCT(CHOOSE({1,2},A1:A3,A6:A8),CHOOSE({1,2},B1:B3,B6:B8))

私は実際にこれをその場で考えたので、制限がわかりません。ご覧のとおり、それほどきれいではありません。

お役に立てれば!:)

于 2014-03-24T21:50:01.747 に答える
5

見事なExcel-fuで可能かもしれませんが、それができたとしても、元のソリューションよりも読みやすくなる可能性はありません。問題は、20年以上経っても、Excelが不連続な範囲を超えていることです。それらに名前を付けることは機能せず、配列数式は機能せず、SUMPRODUCTで見られるように、それらは通常、タプル単位の配列関数では機能しません。ここでの最善の策は、カスタム関数を考え出すことです。

アップデート

不連続な範囲を処理する方法について考えさせられた質問です。それは私が過去に多く対処しなければならなかったものではありません。あなたが質問をしたとき、私はより良い答えを与える時間がありませんでしたが、私は数分を得たので、あなたが望むことをするカスタム関数を作り上げました:

Function gvSUMPRODUCT(ParamArray rng() As Variant)

    Dim sumProd As Integer
    Dim valuesIndex As Integer
    Dim values() As Double

    For Each r In rng()
        For Each c In r.Cells
            On Error GoTo VBAIsSuchAPainInTheAssSometimes
                valuesIndex = UBound(values) + 1
            On Error GoTo 0
            ReDim Preserve values(valuesIndex)
            values(valuesIndex) = c.Value
        Next c
    Next r
    If valuesIndex Mod 2 = 1 Then
        For i = 0 To (valuesIndex - 1) / 2
            sumProd = sumProd + values(i) * values(i + (valuesIndex + 1) / 2)
        Next i
        gvSUMPRODUCT = sumProd
        Exit Function
    Else
        gvSUMPRODUCT = CVErr(xlErrValue)
        Exit Function
    End If

VBAIsSuchAPainInTheAssSometimes:
    valuesIndex = 0
    Resume Next

End Function

いくつかのメモ:

  • Excelは列ごとに範囲を列挙するため、データが列ごとに整理されている連続した範囲がある場合は、gvSUMPRODUCT(A1:B10)ではなくgvSUMPRODUCT(A1:A10、B1:B10)という個別の範囲を選択する必要があります。
  • この関数は、セルの前半と後半をペアごとに乗算し、それらの積を合計することで機能します:gvSUMPRODUCT(A1、C3、L2、B2、G5、F4)= A1 * B2 + C3 * G5 + L2*F4。つまり、順序が重要です。
  • gvNSUMPRODUCT(n、ranges)のようなことを行うことで、関数を拡張してn方向の乗算を含めることができます。
  • セルの数が奇数(範囲ではない)の場合、#VALUEエラーを返します。
于 2010-03-10T15:10:46.277 に答える
2

sumproduct(a, b) = sumproduct(a1, b1) + sumproduct(a2, b2)範囲aが範囲a1とa2に分割されていることに注意してください(bについても同様です)

于 2016-11-16T11:40:44.777 に答える
0

合計積の計算に使用しているデータを要約した中間テーブルを作成すると役立つ場合があります。これにより、計算が簡単になります。

于 2010-03-10T16:49:25.367 に答える