我需要将一列等于特定事物的数据放入数组

时间:2016-05-26 11:52:07

标签: excel vba excel-vba excel-2010

基本上我的数据页面上有4列,而在不同的页面上我有一个帐户列表。 “数据”页面上有多个同名行的原因是因为它们在单独的日期中贡献了不止一次。

我需要在数据页面上查看基金名称等于基金名称的账户页面,数据页面上的SB等于SB,数据页面上的SE等于SE,并找出基金拥有多少贡献者并将其放入在数组中。

在账户页面的栏目中,我需要找到SE不是该基金的贡献者的地方,如果他们返回FALSE,如果他们不是贡献者,则返回TRUE。

在账户页面的栏目中,我需要找到SE是该基金的唯一贡献者,如果他们返回TRUE,则返回FALSE。

在帐户页面上的栏目中,我需要查找SE是否是众多贡献者中的一个,如果它们返回TRUE则返回FALSE。

我有java的编程知识,但它需要在excel中完成,我在过去做过vba但是很久以前了!

帐户页面

Accounts Page

数据页

Data Page

1 个答案:

答案 0 :(得分:2)

如果我能正确理解您的问题,则仅为您提供公式选项。

D列的第一次逻辑检查:

=NOT(SUMPRODUCT((A2=$H$2:$H$14)*(C2=$K$2:$K$14))>0)

当SE的名称出现在K列时,此公式将计算基金名称出现在H列中的次数。因此,如果此结果为0,则它​​们永远不是贡献者。既然你不希望贡献者成为真,我们需要NOT公式来将0(False)更改为1(True)。如果人名作为贡献者出现1次或更多次,可以说2次作为示例,Excel将任何非0视为True。因此,取NOT(2)将导致0或False。

E列的第二次逻辑检查:

=SUMPRODUCT((A2=$H$2:$H$14)*(C2=$K$2:$K$14))=COUNTIF($H$2:$H$14,A2)

这个公式与第一个类似。它首先计算此人的姓名是该帐户的贡献者的次数。然后计算帐户在第H列中显示的次数。如果它们相等,您知道它们是唯一的贡献者,并且将显示TRUE。

第F列的第三次逻辑检查:

=AND(NOT(D2),NOT(E2))

此检查基于前两个结果。你需要知道他们是贡献者,但他们不是唯一的贡献者。换句话说,您的第一次逻辑检查需要为TRUE,而您的第二次逻辑检查需要为FALSE。

这都是在同一张纸上执行的,因此您需要更新地址范围。用三个公式填写第2行并复制下来。

概念证明:

Proof of Concept

那么sumproduct如何运作呢。当使用sumproduct进行逻辑评估以获得列表时,您需要记住,对于excel公式,TRUE为> = 1且False为= 0。在VBA中不一样。 SUMPRODUCT也有点作弊,因为它在()中进行了ARRAY计算。让我们看看第一个产品并逐步完成它。

=SUMPRODUCT((A2=$H$2:$H$14)*(C2=$K$2:$K$14))

第一部分(A2 = $ H $ 2:$ H $ 14)可以作为数组公式输入。它基本上是这样的:

First array formula

现在,如果我们采用第二部分(C2 = $ K $ 2:$ K $ 14),它也可以作为数组公式输入,它基本上是这样的:

Second array formula

所以现在我们在两个数组公式之间有*,这意味着每个数组公式中的相同行乘以另一个。另一个非常关键的步骤是数学行为是导致数组结果从TRUE / FALSE变为1/0的原因。当您最终乘以数组公式时,您正在执行此操作:

Array multiplication

在这种情况下,您可以将*视为AND语句,并且OR语句将为+。

现在有了sumproduct,有一个非常重要的最后一步。它将得到的最终数字数组加在一起以得到一个数字。因此,对于示例情况,它将返回1.如果sumproduct内部的条件在多个场合是真的,则说三次。你会在最后一个数组中看到三个1。当最终数组的总和被采用时,sumproduct将返回3.

总而言之,你可以使用sumproduct来计算多个条件为TRUE的次数,你可以求和满足条件的值,如果你将列乘以条件求和,你可以返回行号通过将条件乘以行(单元格范围)以及可能的其他一些东西来找到唯一的结果。