Excel 2007 – 计算多个工作表中的唯一值

我编写了一份每月报告,其中包括一个具有独特名称的专栏。 我使用一个公式来计算每月列出的唯一名字的数量(例如,如果Smith和Sarah有三个条目,Jones和Martha两个条目,那么公式会给我2结果)。 我使用的公式是=SUMPRODUCT((B5:B46<>"")/COUNTIF(B5:B46,B5:B46&"")) ,它的作品非常漂亮。 列表是,并且必须保留,按datesorting,而不是名称。

随着今年年底临近,我想汇总一个年度总结,包括一年中出现了多less个独特的名字。 我把这个作为一个工作手册,每个月都有单独的表格。 我正在寻找的是一种统计这十二张表格中出现的独特名字的方法(这样,如果史密斯,萨拉和琼斯,一月份的玛莎,史密斯,莎拉和琼斯的一个,二月份的玛莎,我的结果仍然是2 )。

我已经研究过了,但是我发现的所有方法都是计算一个特定名字出现的次数,而不是有多less独特的名字。 我做了一些小小的尝试,看看能不能弄明白,但我显然不在我的联盟之列。 愿意使用和尝试任何东西,但我不能安装任何程序或附加组件没有一个荒谬的过程获得批准,通常需要几个月,所以我想避免这一点。

是粘贴在一张纸上的所有名字一个选项? 如果是这样的话,将12张工作表中的所有名称粘贴到另一张工作表的相同列中,一旦完成,只需从中创build一个数据透视表,将名称添加为列标签,这将为您提供12个月内所有唯一名称的列表,做这个列表中的一个counta公式减去标题和总行,这是你的答案。

编辑这里的代码作为承诺迅速编译列表:

 Sub compile() ws = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") Sheets("Summary").Range("A1", Range("A1000000").End(xlUp)).ClearContents For Each sh In ws Sheets(sh).Select Sheets(sh).Range("A2", Range("A1000000").End(xlUp)).Copy Sheets("Summary").Range("A1000000").End(xlUp).Offset(1, 0).PasteSpecial Next Sheets("Summary").Select 

'End Sub

只要合并选项卡被称为“摘要”,并且每个数组string都按照数组string进行操作,您可以根据实际的选项卡名称进行修改。 它将从单元格“A2”开始的列“A”中的12张图纸中的每一张上复制所有数据,并在“汇总”选项卡上相互粘贴。 请注意这不会在Excel 2003中工作,如果您有Excel 2003,只需将所有“A1000000”引用更改为“A65500”

假设所有的名字都在一个列中并被sorting。

你可以从第一个单元格开始,比较这个单元格是否等于之前的单元格(因为没有之前没有的单元格)。

如果下一个单元格中出现的名称与之前的名称相同,则不要将总和加1。 如果不同,则加1并继续。

最后总和将包含唯一名称的数量。

在每个电子表格上执行。 如果您希望在多个电子表格中自动执行该操作,则必须先进入Visual Basic或loggingmacros,然后对所有电子表格执行此操作。