VBA (Excel) 插入多行的方法 & 算法對比


本文記錄,通過 Excel VBA,插入多行的方法;以插入500行為例,來對比算法上的優劣;是一次很典型的,對算法的闡述;面向小白,言簡意賅 (^_^)


方法 1 (普通):

這種方式是最直觀,但也是最慢的方法;原理就是,一行一行的插入;插入500行,大約要 27.34375 秒;非常的慢!Big O = O(n) = 500;

' insert 500 rows in sheet, with loop
For i = 1 To 500
    Rows(Selection.Row).Insert
Next

方法 2 (算法):

這種方法的精彩之處在於算法;它遠快於 "方法1",但還不是最快的!大約要 0.5390625 秒;這種方法的 Big O = O (logN+1) = log500+1 = 9;

' insert 500 rows in sheet, with algorithm
cum_multiplier = 1
For i = 1 To 500
    If cum_multiplier * 2 < 500 Then
        Rows(Selection.Row & ":" & (Selection.Row + cum_multiplier - 1)).Insert
        cum_multiplier = cum_multiplier * 2
    Else
        rows_remain = 500 - cum_multiplier
        Rows(Selection.Row & ":" & (Selection.Row + rows_remain)).Insert
        Exit Sub
    End If
Next

方法 3 (最快):

這種方法使用的是 VBA 中,Range.Resize() 方法;代碼長度,只有一行;速度也最快,只需 0.078125 秒,但是插入點下面的行越多,花費的時間就越長;從算法的角度來看 Big O = O(1) = 1;

' insert 500 rows in sheet, with Range.Resize()

' insert with format copied
ActiveCell.EntireRow.Offset(1).Resize(500).Insert Shift:=xlDown

' insert without format copied
ActiveCell.EntireRow.Resize(500).Insert

方法 4 (便利):

這種方法使用的是 VBA 中,Range().EntireRow.Insert 方法,和 Rows().Insert 方法;代碼也只有 一行;速度也只需 0.078125 秒,但是插入點下面的行越多,花費的時間就越長;同上,從算法的角度來看 Big O = O(1) = 1;這種方法的好處是,可以指定要從哪行開始插入,是一個額外的方便之處。

' insert 500 rows in sheet, from specified row

' insert rows with Range().EntireRow.Insert method 
Range("12:512").EntireRow.Insert 

' insert rows with Rows().Insert method 
Rows(12 & ":" & 512).Insert
' or with variable
Rows(Selection.Row & ":" & (Selection.Row + 500)).Insert

篇尾總結:

文中記述的方法,是比較簡單,是一個不錯的知識點記錄;但更重要的是,用這簡單的代碼,講述了算法的意義,和 big O 的概念。文章面向初學者,希望對大家有幫助;小白貢獻,語失莫怪,開心每一天 (^_^)~~~


我的博客:

請來關注吧 (^_^)v Bitssea: www.cnblogs.com/bitssea



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM