主要问题是循环的时候删除一行比较麻烦,因为删除了一行后,循环仍然直接访问后一行,会导致一定的异常。

选择一列,删除指定一行

以下代码是选择一列删除指定一行稳妥保险的删除方法:

Columns("G:G").Select	'选择一列
i = 1 '定义一个循环变量,来控制参与循环的元素
While (IsEmpty(Selection(i)) = False) '用是否遇到空单元格来判断是否遍历完成
If (InStr(1, Selection(i), "特定条件", 0) > 0) Then
nowRow = Selection(i).Row '获得当前行号
Rows(nowRow).Delete '删掉当前行
i = i - 1 '抵消删除对循环的影响
End If
i = i + 1 '循环中循环变量正常地加1
Wend

删除数组中的一个元素

不过,删除数组中的一个元素却不方便这样做。因为VBA貌似没提供数组.delete(index)这种好用的函数。

方法1:利用动态数组,在循环中条件判断删除

但可以结合动态数组,将删除元素的数组赋值给新数组,如下代码。其中的b数组便是删除元素后的新数组:

arr1 = Array(1, "特定条件", 3, 999, 1, "特定条件", 3) '定义一个数组
Dim b() As String '定义新数组
k = 0 '记录新数组的长度
For i = 0 To UBound(arr1) '用数组长度来判断是否遍历完成
If (InStr(1, arr1(i), "特定条件", 0) <= 0) Then
ReDim Preserve b(0 To k) '添加到新数组
b(k) = arr1(i)
k = k + 1
End If
Next
'结果是b = Array(1, 3, 999, 1, 3)

参考:vba中怎样去掉数组中的空值-百度知道-jmeycn

注意,用UBound获取数组长度,而不是Len。在VBA中,Len是用来获取Expression的长度的,如字符串长度;UBound返回指定数组的最大下标。
注意2:当数组长度为0时,用UBound获取长度会产生“下标越界”错误。所以这里用k作为新数组的长度值。

方法2:删除数组中的指定值

当然,如果是删除数组中的指定值,更简洁的方式是用Filter,如下:

arr1 = Array(1, "特定条件", 3, 999, 1, "特定条件", 3) '定义一个数组
b = Filter(arr1, "特定条件", False)
'结果也是b = Array(1, 3, 999, 1, 3)

总结:推荐采用方法1

显然,方法1更加通用,可以利用数组之外的其他信息作为条件判断。

删除结果如下图所示:

【笔记】Excel 2021|(二)VBA删除数组中的一个元素、循环时删除一行、选择一列删除指定一行的更多相关文章

  1. C#如何删除数组中的一个元素

    C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个 ...

  2. C语言 · 删除数组中的0元素

    算法提高 6-9删除数组中的0元素   时间限制:1.0s   内存限制:512.0MB      编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动.注意,C ...

  3. [jstips]向数组中插入一个元素

    向现有数组中插入一个元素是经常会见到的一个需求.你可以: 使用push将元素插入到数组的尾部: 使用unshift将元素插入到数组的头部: 使用splice将元素插入到数组的中间: 上面那些方法都是常 ...

  4. php删除数组中相同的元素,只保留一个相同元素

    <?php// 删除数组中相同元素,只保留一个相同元素function formatArray($array){sort($array);$tem = ”;$temarray = array() ...

  5. (转载)PHP删除数组中的特定元素的代码

    (转载)http://www.jb51.net/article/30689.htm 我们知道,PHP没有提供专门删除一个特定数组元素的方法.但是可以通过unset()函数来完成这种要求比如下面的程序: ...

  6. python3 实现删除数组中相同的元素

    # #把数组中相同的元素去除 # #第一种方式: def del_repeatnum(s=[1,1,1,2,2,3,3,4]): s1=[] for i in s: print(i) if i not ...

  7. js循环中删除数组中的某个元素

    (1)使用js中的splice方法循环删除数组中某个值 eg: var arr=new Array(); arr.push(1); arr.push(2); arr.push(3); arr.push ...

  8. js有序数组中插入一个元素,并有序的输出

    题目:比较传入函数的参数,将参数组成数组,从小到大排序,返回新的数组. 如: insert();console.log(arr); //[] insert(-1,-2); console.log(ar ...

  9. js删除数组中重复的元素

    1.方法一 将数组逐个搬到另一个数组中,当遇到重复元素时,不移动,若元素不重复则移动到新数组中 function unique(arr){ var len = arr.length; var resu ...

  10. 剑指offer-特定二维数组中查找一个元素是否存在-二分搜索-二维数组

    int [][] array ={ {1,2,8,9}, {2,4,9,12}, {4,7,10,13}, {6,8,11,19} }; 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都 ...

随机推荐

  1. P1081 [NOIP 2012 提高组] 开车旅行 题解

    传送门 前言 爆肝到半夜,中间假了一次,最终调过了两个样例,交上去过了. 题解 思路 首先进行预处理. 用一种你喜欢的数据结构维护每个城市的海拔,容易求出从每个城市出发,小 \(A\) 和小 \(B\ ...

  2. MacOS环境配置Homebrew

    Homebrew笔记 1. 介绍 官网:https://brew.sh/ 对于习惯了使用命令来完成一切的程序员来说,安装软件这种小事,自然是能够用命令解决,就不用图形界面选择.但是在 Linux 中, ...

  3. ruoyi-vue 界面框架构造

    界面框架: 我采用了flex布局,先分左右,然后右侧再分上下. 步骤: 1. 首先实现简单的菜单 1.1 菜单是个菜单项数组 [] 1.2 菜单项结构 例子 { id:'001', name: '历史 ...

  4. Flume - [05] Hbase sink

    一.概述   此接收器将数据写入Hbase.Hbase配置是从类路径中遇到的第一个Hbase-site.xml获取的.由配置指定的实现 HbaseEventSerializer 的类用于将事件转换为 ...

  5. centos 运行springboot 项目

    jar文件发布: 准备工作: 发布在springboot项目中的pom.xml文件添加如下: <build> <plugins> <plugin> <grou ...

  6. mybatis-generator 自动生成mybatis代码与xml

    一.pxm.xml中引入mybatis-generator并配置 在build节点下的plugins下添加org.mybatis.generator 示例代码如下: <?xml version= ...

  7. SqlmapAPI:自动化SQL注入的利器

    SqlmapAPI:自动化SQL注入的利器 SqlmapAPI简介 SqlmapAPI是基于sqlmap工具的API接口,它允许用户通过编程方式调用sqlmap的功能,实现自动化的SQL注入安全检测. ...

  8. 注册全局图标ts写法

    https://element-plus.gitee.io/zh-CN/component/icon.html#使用图标 仓库地址:https://github.com/Megasu/element- ...

  9. DBeaver连接mysql时Public Key Retrieval is not allowed错误

    前言 DBeaver 连接 mysql 时,报错:Public Key Retrieval is not allowed 解决 在新建连接的时候,驱动属性里设置 allowPublicKeyRetri ...

  10. phpstudy安装redis扩展 windows安装redis扩展

    1.首先查看自己本地环境的php版本信息: 执行phpinfo(),显示php相关信息 2.下载所需的扩展 php redis扩展下载地址 windows上,php开启扩展需要下载ddl 这里要注意的 ...