1

ワークシートベースのSUMPRODUCT呼び出し内でVBA関数を使用する方法を知っている人はいますか?

これは正常に機能し、列Lに「Y」が含まれ列Aに列Kとは異なる値が含まれる列Nの値を合計します。

=SUMPRODUCT(--(Input!L1:L100="Y"), --(Input!A1:A100<>Input!K1:K100), Input!N1:N100)

しかし、2番目の基準でA <> Kだけでなく、次のようなロジックを適用できるようにしたいと考えています...

=SUMPRODUCT(--(Input!L1:L100="Y"), --(MatchNames(Input!A1:A100,Input!K1:K100)), Input!N1:N100)

VBAにMatchNamesという関数がありますが、機能するために何を返す必要があるかを理解できません。ブール値、整数(0または1に設定)の配列を返そうとしました。結果を返す前に結果を転置しようとしましたが、何も機能していません。私はMatchNames関数を介してデバッグしましたが、「有用な」もの(つまり、ブール値の配列)が返されるため、関数が途中で爆破されているわけではありませんが、#VALUEを取得します。SUMPRODUCTで使用しようとすると。

これは私のVBA機能です...

Public Function MatchNames(ByVal rng1 As Range, rng2 As Range) As Boolean()
    Dim blnOut() As Boolean
    Dim k As Long

    ReDim blnOut(rng1.Rows.Count - 1)

    For k = 1 To rng1.Rows.Count
        If rng1.Cells(k, 1).Value <> "" Then
            If rng1.Cells(k, 1).Value <> rng2.Cells(k, 1).Value Then
                blnOut(k - 1) = True
            End If
        End If
    Next

    MatchNames = blnOut
End Function
4

1 に答える 1

3

あなたが提案するように、MatchNames配列を転置する必要があると思います(値の行に相当するものを返すように見えるため、SUMPRODUCTの他の値の列では機能しません)。

VBAでどのように転置するかはわかりませんが、それができない場合は、SUMPRODUCTで次のように転置します。

=SUMPRODUCT(--(input!L1:L100="Y"),--TRANSPOSE(MatchNames(input!A1:A100,input!K1:K100)), input!N1:N100)

ただし、TRANSPOSEを使用すると、数式を「配列入力」する必要があります。CTRL+SHIFT+ENTER

...または、1x100の範囲に100x1を乗算するMMULTを使用できます。

=MMULT(MatchNames(input!A1:A100,input!K1:K100)+0,input!N1:N100*(input!L1:L100="Y"))

後者の数式が機能するには、合計範囲(input!N1:N100)がすべて数値である必要があります

于 2013-02-11T16:31:10.613 に答える