统计一个区域中不重复的单元格内容数量

有同事问我,怎么能统计出一个两维表格中不重复的图号数量?其实,如果不考虑重复的事情,就很好解决了,右击EXCEL界面的右下如图部分,将默认的Sum选项改为Count选项,即可统计出所选择范围中内容不为空的单元格的数量。

image

image

如果我们选择下面的部分,

image

就会在EXCEL界面的右下解看到计数的数量image

但这不是我们所需要的,因为这里面有重复的图号,我们是想要不重复的图号的数量。

为此,我采取一种转换的方法来作为解决这个问题的方法:即采取将两维表格变为一维表格的方法,将复杂问题简单化。

我们需要对这个表格进行分析,我要将这个区域内的单元格逐个读取,并写在另一个Sheet中。为方便举例,我拟一这个表格,我们可以看出,它的数据区有6行,7列。这样,我们可以采用offset函数来读取这个数据区。

offset的用法简单说,就是5个变量。下面的函数描述是来自EXCEL的HELP。

OFFSET(reference,rows,cols,height,width)

Reference    is the reference from which you want to base the offset. Reference must refer to a cell or range of adjacent cells; otherwise, OFFSET returns the #VALUE! error value.

Rows    is the number of rows, up or down, that you want the upper-left cell to refer to. Using 5 as the rows argument specifies that the upper-left cell in the reference is five rows below reference. Rows can be positive (which means below the starting reference) or negative (which means above the starting reference).

Cols    is the number of columns, to the left or right, that you want the upper-left cell of the result to refer to. Using 5 as the cols argument specifies that the upper-left cell in the reference is five columns to the right of reference. Cols can be positive (which means to the right of the starting reference) or negative (which means to the left of the starting reference).

Height    is the height, in number of rows, that you want the returned reference to be. Height must be a positive number.

Width    is the width, in number of columns, that you want the returned reference to be. Width must be a positive number.

简单解释这5个变量:

reference是你选中的参考位置,即基准单元格,如果你用它来作为公式使用,一般都使用绝对引用方式。

rows是基于你的基准单元格的行偏移量,即相对于你当前的单元格(或区域左上角单元格)偏离基准单元格的行数。

cols是基于你的基准单元格的列偏移量,即相对于你当前的单元格(或区域左上角单元格)偏离基准单元格的列数。

height是你要引用的区域的高,如果你只引用一个单元格,则该值为1。

width是你要引用的区域的宽,如果你只引用一个单元格,则该值为1。

该公式用在作EXCEL的动态菜单时极为有用,关于这部分的内容,我将在另外的文章中作说明。

这样,我们就了解了offset的基本用法。同时你也会发现,我们将reference作为绝对引用,rows和cols用变量来填充,是不是就可以遍历整个数据区域了。

所以,我们在另外一个Sheet中作出两列数来,第1列是行计数,第2列是列计数,我们先看列计数的公式。

image image

B1单元格我们预设了个"1",B2单元格的公式见上面的截图。公式的含义为判断当前的单元格的值,如果上一个单元格的数值加1后超过了7,就重置为1,否则就是上一个单元格的数值加1。

image

行计数的公式也类似,A1单元格我们预设了个"1",A2单元格的公式见上面的截图。公式的含义为判断后一列的列计数的数值,如果B列的同行的单元格中数值比上一个同列单元格的数值要小,就将本单元格的数值加1,否则数值不变。这意味着列计数已经重置了,说明行计数需要增加了。

这样行和列的公式就作完了,我们复制这些公式向下,直到A列的值达到我们数据区域的上限6。

image

随后我们就开始作读取数据区的公式。

image 

上面的截图就是读取数据区的公式。我们可以参照我们前面所述的公式解释来理解。Sheet1!$A$1表示我们的基准单元格是Sheet1的A1单元格,为使公式复制时该基准单元格不变化,所以我们使用了绝对引用,用$来固定这个单元格。

Sheet2!A1和Sheet2!B1表示我们使用Sheet2的A1和B1单元格里的数值来作为相对于基准单元格的偏移量。

最后两个"1"表示我们要读取的区域是一个单元格,而不是多个单元格,因为高和宽均是1。

这样我们就可以复制这些公式了。

image

这里我们只截取前面几行的效果来展示一下。这样,我们就把一个两维表格给转化成一维表格了。这个表格相当于我们先行后列的方式,先是第一行从左到右,结尾时再折下来,随后再是第二行、第三行……

有了这个一维表格,我们就进行下一步:排序和统计。

我们将这个一维表格进行排序。先复制这些数据,再作数值的选择性粘贴。

image

image

image

image

image

我们再作排序。

image

image

我们需要告诉EXCEL这个区域没有标题行。

image

点击OK后,有可能你会看到这个警告信息。

image

这是因为我们的数据区域中的混杂着文本数字和数值,EXCEL提示你数据中可能有文本的数字,让你选择如何处理,一般情况下,我们都选择第一个选项,让EXCEL把所有像数字的内容均作为数字处理。点击OK后继续。

我们就得到了已经排过序的数据区域了。

image

 

下一步,我们再对这块区域作处理。

image 

我们在B1单元格预设一个"0",因为A列中的0表示原表格中的内容为空,所以不是我们想要的。

在B2单元格,我们编了一个公式,来判断当前行的A列单元格中的内容是否与上一个单元格内容相同,如果相同,就意味着重复,所以当前单元格数值不变,否则意味着有一个不同的内容出现了,当前单元格数值加1。

公式向下复制。

image

数据区的最后内容。

image

我们可以看数据区的最后一个单元格中的数值就是我们想知道的该数据区域中有多少个不重复的内容的计数。

我们也可以再作个公式来看这个计数。

image

公式很简单,就是一个MAX函数,其中的参数就是我们要看的B列。其结果就是我们已经知道的那个计数。

至此,我们的统计工作完成。我们可以把这个文件保存下来,以后再遇到类似情况时,只需要改动其中的部分参数就可以实现重复使用的目的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章