如何根据分组

时间:2015-10-15 15:39:30

标签: excel vba excel-vba

我在2列中获得了数据(每次更改) - 基本上是状态和数字。这是一个例子:

示例数据

State           Total
Connecticut     624
Georgia         818
Washington      10
Arkansas        60
New Jersey      118
Ohio            2,797
N. Carolina     336
Illinois        168
California      186
Utah            69
Texas           183
Minnesota       172
Kansas          945
Florida         113
Arizona         1,430
S. Dakota       293
Puerto Rico     184

每个州都需要分组。分组如下:

分组

**US Group 1**
California
District of Columbia
Florida
Hawaii
Illinois
Michigan
Nevada
New York
Pennsylvania
Texas

**US Group 3**
Iowa
Idaho
Kansas
Maine
Missouri
Montana
North Dakota
Nebraska
New Hampshire
South Dakota
Utah
Wyoming

其他所有州都属于美国第2组......

我想要做的是总计每组的总和。所以在这个例子中,我的总数为:

总计

650 in Group 1 (4 states)
6365 in Group 2 (9 states)
1307 in Group 3 (3 states)

因此,每当我获得包含此数据的新电子表格时,我想要做的就是每次都不必创建if / countif / sumif公式。我认为选择我的数据并运行一个可以做到这一点的宏(可能会检查某些图例或其他内容)会更有效率。

有人能指出我正确的方向吗?我现在一直在反对VBA编辑2天了......

2 个答案:

答案 0 :(得分:2)

这是一种方式。

第1步:为每个组创建命名范围。

第2步:尝试以下公式:=SUMPRODUCT(SUMIF(A2:A18,Group1,B2:B18))

公式细分:

A2:A18是州名

Group1是具有第1组中每个州的命名范围

B2:B18是您想要求和的值。

重要的是,您的州名和您想要求的值是相同的大小(行数)。您还应该标准化您的州名。在您的数据中使用S. Dakota,在您指定的范围内拥有南达科他州不会起作用。将状态名称的不同变体添加到列表中,或标准化您的数据。

要清楚地了解公式的作用,请使用“公式”选项卡上的“评估公式”按钮,它会比我尝试解释它要好得多。

修改

尝试使用此公式来汇总不在Group1或Group3中的值:

=SUMPRODUCT(--(NOT(ISNUMBER(MATCH(A2:A18,Group1,0)))),--(NOT(ISNUMBER(MATCH(A2:A18,Group3,0)))),B2:B18)

似乎在我的最终工作。基本上它只通过在B2:B18中求和valyes来工作,其中两个匹配函数返回N / A(意味着它不在定义的组列表中)。

答案 1 :(得分:0)

使用vlookup将状态映射到组。然后从组号中添加它,如果找到它,或添加0。