最近在搞VBA,在感叹Excel功能强大的同时,对于新接触的一门编程语言也很烦恼。很多基础的语法都要靠网上搜索。现总结一些学习到的心得。

  VBA高效删除不连续多行

  在一个拥有几万条数据的Excel中,若要删除其中其些行数据,并且这些行是不连续的。那么用for循环遍历、判断后一条一条的删除的效率是很低的。那么有什么方法可以在1秒级别的时间里删除这些行呢?

  大致思路是先将这些行连续起来,再批量删除。

  可以借用一列数据进行辅助。for循环判断出将要删除的行,在辅助列的位置设置一个标志位,如“1”。再将这列排序,最后删除。代码如下:

Dim rowBegin As Integer
Dim rowMax As Integer
rowBegin =
rowMax = ActiveSheet.UsedRange.Rows.count
'省略设置标志位的代码
'借用Z列辅助 '排序
Range("A" & rowBegin & ":Z" & rowMax).Sort key1:=Range("Z" & rowBegin), order1:=xlAscending, header:=xlNo
'删除
If [Z65536].End(xlUp).row >= rowBegin Then
Rows(rowBegin & ":" & [Z65536].End(xlUp).row).Delete
End If

  4万条数据中删除2万条数据大概用时1秒。

  另,总结一些遇到过的问题。

  给单元格加锁时,提示“不能设置类Range的Locked属性”

ActiveSheet.Range("B:B").Locked = True '给第二列加锁

  可能由两个原因造成:

  1.加锁范围中的某部分已经有锁(如已经将第一行加锁),这样在加锁前要先解除锁定。

ActiveSheet.Unprotect ("password")

  2.加锁的部分与未加锁的部分有合并单元格(如A1与B1是合并单元格)。

VBA高效删除不连续多行的更多相关文章

  1. CListCtrl中删除多个不连续的行

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  2. 实现HBase增量入库(HBase删除自定义时间戳行数据)

    目录 1. 背景描述 2. 问题描述 3. 解决方案 1. 背景描述 目前在做音乐推荐项目,前期做排序模型优化,任务是使用模型对用户的历史音乐进行排序,有6800多万个用户,约40G的用户数据,使用H ...

  3. 删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误,即DeletedRowInaccessibleException

    删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误 =========================================================== 采 ...

  4. 手把手教你打造高效的 Kubernetes 命令行终端

    Kubernetes 作为云原生时代的操作系统,熟悉和使用它是每名用户的必备技能.本文将介绍一些提高操作 Kubernetes 效率的技巧以及如何打造一个高效的 Kubernetes 命令行终端的方法 ...

  5. sed 删除最后几行 和删除指定行 awk使用

    sed 删除最后几行 和删除指定行   转载原文链接:http://blog.51cto.com/lspgyy/1305489 sed 想删除文件中的指定行,是可以用行号指定也可以用RE来匹配的. 删 ...

  6. Linux下如何高效删除一个几十G的文本文件的最后一行或几行

    当我们在服务器端记录日志或文本数据时,有时候会有需要删除一个大文件的最后几行,这时如何才能高效实现. 上网浏览终于找到dd命令,亲测如下,删除一个32GB的日志文件最后100行仅需要4分钟 [root ...

  7. Linux——高效玩转命令行

    [0]统计文件or压缩文件的行数 zcat file.gz | sed -n '$='   #迅速.直接打印出多少行.-n 取消默认的输出,使用安静(silent)模式    '$='  不知道是什么 ...

  8. Matlab Delete Row or Col 删除矩阵的行或列

    Matlab中,我们有时候要删除矩阵中的某行某列,可以采用下列方法进行删除: a = [ ]; a(,:) = []; % Delete row a(:,) = []; % Delete col

  9. jQuery如何动态添加具有删除按钮的行

    代码实例如下: <!DOCTYPE html><html><head><meta charset=" utf-8"><meta ...

随机推荐

  1. FPGA入门1

    FPGA入门知识介绍    近几年来,由于现场可编程门阵列(FPGA)的使用非常灵活,又可以无限次的编程,已受到越来越多的电子编程者的喜爱,很多朋友都想学习一些FPGA入门知识准备进行这个行业,现在关 ...

  2. mysql查询重复

    select * from tablename where id in (    select id from tablename    group by id    having count(id) ...

  3. meta 页面元信息定义

    禁止页面缓存 1.name属性 name属性主要用于描述网页,与之对应的属性值为content,content中的内容主要是便于搜索引擎机器人查找信息和分类信息用的. meta标签的name属性语法格 ...

  4. Java Day 08

    数组工具对象建立 多个.java文件先编译谁 数组工具类中静态的使用 构造函数私有化 数组工具类--文档注释 设计模式 -- 单例设计模式 保证一个类在内存中的对象唯一性 1.不允许其他程序使用new ...

  5. RobotFramework-关键字

    地址:https://github.com/NitorCreations/RobotFramework-EclipseIDE/tree/master/plugin/robot-indices Coll ...

  6. CocoaPods最佳实践探讨

    近期在项目中首次使用了CocoaPods.从软件工程的角度来看,我对目前常见的CocoaPods使用方法有些意见,建议做一些改进.先说一下我建议的最佳实践,后面再分析为什么要这样做.并且希望大家根据自 ...

  7. Matlab绘制透明平面(二元函数)

    一.需求来源 对空间结构聚类,恰好是圆台,找到了上下底面的方程,所以画图. 二.需求解决 2.1 绘制平面 x = linspace(0,5,100); y = linspace(0,4,100); ...

  8. CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT

    这个error的全称是这样的 D3D11 ERROR: ID3D11Device::CreateInputLayout: Element[1]'s format (UNKNOW) cannot be ...

  9. Sqli-labs less 65

    Less-65 $id = '"'.$id.'"'; // Querry DB to get the correct output $sql="SELECT * FROM ...

  10. 在 Java 中如何更高效地存储和管理 SQL 语句?

    [编者按]还在为管理 Java 代码中的 SQL 语句而烦恼吗?让 Zemian 帮你摆脱困境吧!本文系 OneAPM 工程师编译整理 注意:使用java.util.Properties#loadFr ...