分享

利用字典,将多列指定类型单元格数据进行排重处理

 新用户49643053 2020-01-05

大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第72讲内容:利用字典,对多列指定类型单元格数据排重处理

在这套VBA数组与字典解决方案中我已经多次讲过利用字典的排重处理,这些都是非常实用的经验,读者可以把这些代码用在自己的工作中,肯定会起到事半功倍的作用,今日我们仍是讲解字典的排重,但排重的范围是有所设定的,就是指定格式的单元格,单元格有哪些格式呢?有很多的选项,我们可以选择,我将在下面的内容中讲到。

实例,如下截图的绿色区域,要在其中选择不重复的数据,但这个区域要要不含公式的,我

利用字典,将多列指定类型单元格数据进行排重处理

们注意到在E5的单元格中是公式,这个时候要如何处理呢?

利用字典,将多列指定类型单元格数据进行排重处理

思路分析:在指定单元格的区域上想办法,把不必要的区域去掉,Range.SpecialCells 方法可以返回一个 Range 对象,该对象代表与指定类型和值匹配的单元格,所以我们在代码中要利用这个属性,下面看我给出的代码:

Sub mynzsz_72() '第72讲 利用字典,对多列指定类型单元格数据排重处理

Sheets('72').Select

'如下SpecialCells(xlCellTypeConstants,23)语句中的23=16+4+1+2,即表示定位的常量包含4种类型的单元格:错误值+逻辑值+数字+文本

Set rans = [a:e].SpecialCells(xlCellTypeConstants, 23)

'定义字典

Set mydic = CreateObject('Scripting.Dictionary')

'在指定的单元格内进行循环

For Each uu In rans

If Not mydic.exists(uu.Value) Then mydic.Add uu.Value, ''

Next

'清空指定区域

[h:h].ClearContents: [h1] = '多列排重'

'回填数据

[h2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.keys)

Set midic = Nothing

End Sub

代码截图:

利用字典,将多列指定类型单元格数据进行排重处理

代码讲解:

1 上述代码用一个Range.SpecialCells 方法可以返回一个 Range 对象,指定单元格的取值范围,然后利用字典进行排重处理。

2 '如下SpecialCells(xlCellTypeConstants,23)语句中的23=16+4+1+2,即表示定位的常量包含4种类型的单元格:错误值+逻辑值+数字+文本

Set rans = [a:e].SpecialCells(xlCellTypeConstants, 23)

上述语句中利用[a:e].SpecialCells(xlCellTypeConstants, 23)选择了[a:e]列中错误值+逻辑值+数字+文本的单元格。

对于Range.SpecialCells 方法该对象代表与指定类型和值匹配的所有单元格,其语法如下:

表达式.SpecialCells(Type,Value)

其Type参数的可选XlCellType常 量及对应值如下:

XlCellType 常量 值 说明

xlCellTypeAllFormatConditions -4172 任意格式单元格

xlCellTypeAllValidation -4174 含有验证条件的单元格

xlCellTypeBlanks 4 空单元格

xlCellTypeComments -4144 含有注释的单元格

xlCellTypeConstants 2 含有常量的单元格

xlCellTypeFormulas -4123 含有公式的单元格

xlCellTypeLastCell 11 已用区域中的最后一个单元格

xlCellTypeSameFormatConditions -4173 含有相同格式的单元格

xlCellTypeSameValidation -4175 含有相同验证条件的单元格

xlCellTypeVisible 12 所有可见单元格

在上述的单元格类型中,当Type参数为 xlCellTypeConstants 或 xlCellTypeFormulas时,

Value参数有4种XlSpecialCellsValue 常量可选,如下:

XlSpecialCellsValue 常量 值 说明

xlErrors 16 错误值

xlLogical 4 逻辑值

xlNumbers 1 数字

xlTextValues 2 文本

①SpecialCells(xlCellTypeConstants,23)语句中的23=16+4+1+2,即表示定位的常量包含4种类型的单元格:错误值+逻辑值+数字+文本

② SpecialCells(xlCellTypeConstants, 20).Select语句中的20=16+4只要定位常量包含2种类错误值及逻辑值。

3 '在指定的单元格内进行循环

For Each uu In rans

If Not mydic.exists(uu.Value) Then mydic.Add uu.Value, ''

Next

'清空指定区域

[h:h].ClearContents: [h1] = '多列排重'

'回填数据

[h2].Resize(mydic.Count, 1) = WorksheetFunction.Transpose(mydic.keys)

Set midic = Nothing

上述代码实现了在指定单元格中的排重处理,不再过多的解释。

利用字典,将多列指定类型单元格数据进行排重处理

当我们把上面公式的数据做一个数值粘贴后,得到如下的结果:

利用字典,将多列指定类型单元格数据进行排重处理

今日内容回向:

1 如何指定单元格的类型?

2 SpecialCells(xlCellTypeConstants,23) 中的23如何理解呢

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多