大家好,今日我们继续讲解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如何理解呢 |
|
来自: 新用户49643053 > 《字典知识》