zoukankan      html  css  js  c++  java
  • 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是合并单元格)。

  • 相关阅读:
    [转载]openerp 6.0.2库存业务
    [转载]OPENERP 6.0.2中的财务概念
    负载均衡
    SQL Server高可用性部署实施 SQL server 群集
    在苹果lion中安装xcode3系列版本
    MacBook 以及 XCode 使用小结
    C++必知的几个知识点
    最新 xcode 4.2 ios 5.0无证书发布ipa文件
    负载参考
    SQLSERVER 2005 表分区说明
  • 原文地址:https://www.cnblogs.com/hanmou/p/3396277.html
Copyright © 2011-2022 走看看