• VBA高效删除不连续多行


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

      VBA高效删除不连续多行

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

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

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

    Dim rowBegin As Integer
    Dim rowMax As Integer
    rowBegin = 2
    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是合并单元格)。

  • 相关阅读:
    函数细节
    ElementUI的Table组件自定义合计行内容
    好看的字体收藏
    MD5加密生成与SHA526加密生成
    XML和Map之间互相转换
    银联支付
    微信支付开发
    MySql创建索引,添加索引
    jqgrid分级表格合并
    关于C# XmlDocument方法Load加载流后自动释放流的解决方法
  • 原文地址:https://www.cnblogs.com/hanmou/p/3396277.html
Copyright © 2020-2023  润新知