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是合并单元格)。

  • 相关阅读:
    USACO 3.3.1 Riding the Fences 骑马修栅栏(欧拉回路)
    USACO 3.2.6 Sweet Butter 香甜的黄油(最短路)
    USACO 1.3.4 Prime Cryptarithm 牛式(模拟枚举)
    USACO 1.3.3 Calf Flac(Manacher算法)
    USACO 1.2.2 Transformations 方块转换
    小希的迷宫(并查集判环)
    Is It A Tree?(并查集)
    Manacher算法——求最长回文子串
    Live Love(思维)
    Longge's problem(欧拉函数应用)
  • 原文地址:https://www.cnblogs.com/hanmou/p/3396277.html
Copyright © 2011-2022 走看看