大家好,我们今日继续讲解VBA数组与字典解决方案第22讲:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法。如果文本中含有大量的重复值,此时,如果我们要剔除重复值,该怎么办?用VBA的方法该如何做到呢?我在这讲和下一讲中将解答这个问题,并提供给读者一个可以测试的实例。今日先讲这个内容要用到的知识点。

一 :Filter函数:这个函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集,语法如下:Filter(sourcesrray, match[, include[, compare]])

参数

a) sourcesrray是必须的,要执行搜索的一维字符串数组。

b) match是必须的,要搜索的字符串。

c) include是可选的,Boolean值,表示返回子串是否包含match字符串。如果参数include是True,Filter函数返回的是包含match参数子字符串的数组子集。如果参数include是False,Filter函数返回的是不包含match参数子字符串的数组子集。

d) compare是可选的,所使用的字符串比较类型。

二:ReDim语句,这个语句在过程级别中使用,用于为动态数组变量重新分配存储空间,语法如下:

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]]

参数

a) Preserve是可选的,关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。

b) varname是必须的,变量的名称。

c) subscripts是必须的,数组变量的维数,最多可以定义 60 维的多维数组,使用下面的语法;[lower To] upper [,[lower To] upper]

使用动态数组去除文本中的重复值,如下面的代码所示。

Sub MyNZsz_5() '第22讲 利用数组排重的方法

Dim Splarr() As String

Dim Arr() As String

Dim Temp() As String

Dim r As Integer

Dim i As Integer

On Error Resume Next

Splarr = Split(Sheets("22").Range("a1"), " ")

For i = 0 To UBound(Splarr)

Temp = Filter(Arr, Splarr(i))

If UBound(Temp) < 0 Then

r = r + 1

ReDim Preserve Arr(1 To r)

Arr(r) = Splarr(i)

End If

Next

Sheets("22").Range("a5").Resize(r, 1) = Application.Transpose(Arr)

End Sub

代码解析:

MySplitarr过程将工作表Sheets("22")中A1单元格的文本去除重复值后写入到工作表Sheets("22")中的A列单元格。

第2行代码声明数组Splarr用来保存Sheets("22")中A1单元格的文本。

第3行代码声明数组Arr用来保存去除重复值后的文本。

第4行代码声明数组Temp用来判断文本是否重复。

第5行代码声明变量r用来保存去除重复值后的文本数量。

第7行代码启动错误处理程序来忽略错误,因为在程序运行到第11行代码会发生下标越界错误。

第8行代码使用Split 函数以Sheets("22")中A1单元格的文本创建一个下标从零开始的一维数组。

第9行代码使用For...Next语句遍历数组Splarr的所有元素。

第10行代码使用Filter函数创建一个数组Temp用来保存以当前Splarr数组的值在Arr数组中的搜索结果。

第11行代码根据返回的数组Temp的最大下标来判断当前Splarr数组的值是否重复。在使用使用Filter函数时如果没有相匹配的值,将返回一个空数组,最大下标小于0。如果没有找到,返回的结果是-1.

第12行代码如果当前Splarr数组的值不重复则将变量r的值加1。

第13行代码重新定义动态数组大小。

第14行代码将不重复值添加到数组Arr中。

第15行代码使用工作表Transpose函数将去除重复值的的文本转置后写入到工作表单元格中。

代码的截图:

运行前的截图:很显然有很多的重复数值:

运行后的截图:

今日内容回向:

1 上述代码是否清楚了它的运行过程呢?

2 第7行代码启动错误处理程序来忽略错误,这是为什么呢?

c++删除数组中重复元素_在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法...相关推荐

  1. [转载] python获取set中某些元素_取集合中元素_Python Set集合

    参考链接: Python set集合 copy() Set集合 阅读本文需要3分钟 2019.09.05 集合(set)是一个无序不重复元素的序列.基本功能是进行成员关系测试和删除重复元素.可以使用大 ...

  2. python获取set中某些元素_取集合中元素_Python Set集合

    Set集合 阅读本文需要3分钟 2019.09.05 集合(set)是一个无序不重复元素的序列.基本功能是进行成员关系测试和删除重复元素.可以使用大括号 { } 或者 set() 函数创建集合,注意: ...

  3. JAVA中修改顺序表中的元素_在Java中修改列表的每个项目

    小编典典 第二个版本会更好.在内部,它们最后是相同的,但是第二个实际上允许您修改列表,而第一个将引发ConcurrentModificationException. 但是,然后您以错误的方式使用了It ...

  4. js获取iframe中的元素_在 HTML 中包含资源的新思路

    作者:scott jehl 翻译:疯狂的技术宅 原文:https://www.filamentgroup.com/lab/html-includes/未经许可严禁转载 注意:这篇文章描述了一种我们仍需 ...

  5. python如何取map中的元素_在Python中使用map()获取列表元素在字符串中存在的次数...

    下面是对goalPost移动的一个响应("我可能需要regex,因为在不久的将来我将需要单词分隔符"): 此方法解析文本一次,以获得所有"单词"的列表.每个单词 ...

  6. 将栈S中的元素逆置,使用额外的一个栈L和非数组变量

    /*将栈S中的元素逆置,使用额外的一个栈L和非数组变量*/ #include<stdio.h> #include<stdlib.h> #include<time.h> ...

  7. 删除数组中指定元素_如何删除PHP数组元素键值并重新排序

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 想要删除PHP数组中某个元素键值,然后重新规范索引排序.我们可以使用PHP中的内置函数uns ...

  8. python判断数组中是否存在重复元素_利用python查看数组中的所有元素是否相同

    不知道大家有没有过这种经历,就是想要判断两个数组运算后得到的新数组中的各个元素值是否相同.这里给出一种使用np.unique()的方法,代码如下:cbc免费资源网 import numpy as np ...

  9. C# list删除 另外list里面的元素_在Python 中 List 操作 9种例子详细了解

    list的操作有循环.切片.增.删.改.查.反转.排序: 接下来我们逐个来说一下: 首先我们要知道,列表的索引(下标)从0开始,最后一个可以用-1表示. 1. 循环 如果直接for 循环一个list ...

最新文章

  1. javascript 异常基本语法
  2. C++动态(显式)调用 C++ dll示例
  3. php及时提醒反馈,php,实时交互_请问PHP脚本执行时如何实时提供反馈,php,实时交互 - phpStudy...
  4. java 16 binary_【图片】【困扰】java(tm) platform se binary 已停止工作该如何是好【minecraft吧】_百度贴吧...
  5. Android网络课程笔记-----本地音乐播放
  6. php mysql 连接类_深入理解php的MySQL连接类
  7. 极光推送 简书android,(Android)react-native集成极光推送
  8. Python 机器学习 利用sklearn构建决策树的实现 2
  9. 【C#】:浅谈反射机制 【转】
  10. Beanutils的使用
  11. php精准函数,PHP常用函数大全
  12. Python入门--函数参数的定义,以及print输出格式的设置
  13. 插入网站连接_网站开发与网页制作
  14. webstorm快捷键大全
  15. 10 个超棒的 jQuery 视频插件
  16. OA集成新标杆 10oa系统集成能力不容小觑
  17. pcb天线和纯铜天线_PCB天线是什么
  18. python 离散点 等高线_Matplotlib中的散点图等高线
  19. 金蝶全渠道营销列车,邀请您上车
  20. ajax提交,form表单提交,onsubmit=return checksubmit()提交验证

热门文章

  1. auto errored after 报错解决_漫谈数据倾斜解决方案(干货)
  2. 二、十进制数字快速转换为16进制字符
  3. mfc 对话框应用程序 如何利用按钮弹出另一对话框
  4. 好久没有写blog了。。。
  5. 数据挖掘:模型选择——逻辑回归
  6. [C++] 前置++与后置++
  7. hdu 6015 Gameia(树上博弈)
  8. ie6中兼容性问题总结
  9. redhat 6.5 【源码编译安装 mysql-5.5.47】
  10. ubuntu12.04 + virtualbox