gpt4 book ai didi

vba - Excel SUMPRODUCT 与基于 VBA 的条件

转载 作者:行者123 更新时间:2023-12-04 22:08:43 25 4
gpt4 key购买 nike

有谁知道如何在 中使用 VBA 函数?工作表 基于对 SUMPRODUCT 的调用?

这很好用,将 N 列中的值相加,其中 L 列包含“Y”,A 列包含与 K 列不同的值...

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

但我希望能够在我的第二个标准中应用更多的逻辑,而不仅仅是 A<>K,就像这样......
=SUMPRODUCT(--(Input!L1:L100="Y"), --(MatchNames(Input!A1:A100,Input!K1:K100)), Input!N1:N100)

我的 VBA 中有一个名为 MatchNames 的函数,但我无法确定它需要返回什么才能工作。我尝试返回一个 bool 整数数组(设置为 0 或 1),我尝试在返回结果之前转置结果,但没有任何效果。我已经通过 MatchNames 函数进行了调试,它确实返回了一些“有用”的东西(即 bool 数组),所以并不是该函数在中途被炸毁,但我得到了#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

最佳答案

我认为您的 MatchNames 数组需要是 转置正如您所建议的那样(因为它似乎返回了相当于一行值的值 - 这不适用于 SUMPRODUCT 中的其他值列)。

我不知道你如何在 VBA 中转置它,但如果你不能这样做,那么在 SUMPRODUCT 中转置
=SUMPRODUCT(--(input!L1:L100="Y"),--TRANSPOSE(MatchNames(input!A1:A100,input!K1:K100)), input!N1:N100)
但是使用 TRANSPOSE 意味着公式现在需要使用 CTRL+SHIFT+ENTER “输入数组”

...或者您可以使用 MMULT 将 1x100 范围乘以 100x1,即
=MMULT(MatchNames(input!A1:A100,input!K1:K100)+0,input!N1:N100*(input!L1:L100="Y"))
为了使后一个公式起作用,总和范围 - 输入!N1:N100 - 必须全部为数字

关于vba - Excel SUMPRODUCT 与基于 VBA 的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com