標題:
[發問]
(已解決)插入一行空白列有快速的方式嗎?
[打印本頁]
作者:
freeffly
時間:
2012-4-23 15:52
標題:
(已解決)插入一行空白列有快速的方式嗎?
本帖最後由 freeffly 於 2012-4-24 15:35 編輯
目前知道的方法有這三種
不過前面兩種速度好像稍微慢
最後一種用輔助欄的方式好像有稍微快一點
不知道還有沒有方式可以讓插入一行速度更快
範例說明:當編號不一樣插入一行區隔
Sub 插入一行()
Application.ScreenUpdating = False
r = 4
Do While Cells(r, 3) <> ""
first = Cells(r, 3)
Do While Cells(r, 3) = first
r = r + 1
Loop
Rows(r).Insert
r = r + 1
Loop
End Sub
複製代碼
Sub 插入行()
Application.ScreenUpdating = False
Dim ra As Long
For ra = [A65536].End(xlUp).Row To 3 Step -1 '從最後一行向前建立行迴圈,步進-1
If Range("C" & ra) <> Range("C" & ra - 1) Then
Rows("" & ra).Insert shift:=xlDown '插入1行
End If
Next
End Sub
複製代碼
Sub 插入()
Application.ScreenUpdating = False
Dim ra As Long
For ra = [A65536].End(xlUp).Row To 3 Step -1 '從最後一行向前建立行迴圈,步進-1
If Range("C" & ra) = "Y" Then
Rows("" & ra).Insert shift:=xlDown '插入1行
End If
Next
複製代碼
[attach]10608[/attach]
作者:
Hsieh
時間:
2012-4-23 16:09
回復
1#
freeffly
利用小計功能
Sub Ex()
With Range("A1").CurrentRegion
.Subtotal GroupBy:=2, Function:=xlCount, TotalList:=Array(2), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
.SpecialCells(xlCellTypeFormulas).EntireRow.Clear
Range("A1").ClearOutline
End With
End Sub
複製代碼
作者:
freeffly
時間:
2012-4-23 16:10
剛剛是了一下將所有Y選起然後一次插入可以減少時間
可是選取的方式要做到跟ctrl選取一樣
下面是之前我提問別的問題改的
可是用這種方式會做到連續選取
改成插入行就會跟我要的不一樣
Sub di()
Dim rag As Range, n As Integer
n = 3
Do Until Cells(n, 2) = ""
If Cells(n, 3) = "Y" Then
If rag Is Nothing Then
Set rag = Cells(n, 3)
Else
Set rag = Union(rag, Cells(n, 3))
End If
End If
n = n + 1
Loop
rag.Select
End Sub
複製代碼
作者:
freeffly
時間:
2012-4-23 16:20
本帖最後由 freeffly 於 2012-4-23 16:25 編輯
回復
2#
Hsieh
版主你的方法之前沒想過(應該可以算不用程式碼的方法吧)
不過剛剛跑還是有點久
<不過比原來方式快>
我自己試錄巨集也要花很多時間(還沒跑完)
剛剛想的用個別選取然後再一起插入好像是可以比較快達成
不過個別選取這各程式碼的動作我不知道怎嚜寫
作者:
oobird
時間:
2012-4-23 17:14
只要有相鄰列就無法一起選取分別插入的,那會插入在同一區塊
再說判斷插入列是很慢的,最好的方式是重建資料。例如:
Sub 插入()
Dim rng, arr, i%, r%
T = Timer
rng = Range([a1], [b65536].End(3))
ReDim arr(1 To UBound(rng) * 2, 1 To 2) As String
For i = 1 To UBound(rng)
r = r + 1
If i > 2 Then
If rng(i, 2) <> arr(r - 1, 2) Then r = r + 1
End If
arr(r, 1) = rng(i, 1): arr(r, 2) = rng(i, 2)
Next
[a:b] = ""
[a1].Resize(r, 2) = arr
MsgBox Timer - T
End Sub
複製代碼
作者:
freeffly
時間:
2012-4-23 17:22
回復
5#
oobird
版主好快喔
雖然程式碼看起來很簡單
但是我看不太懂
redim以後的我都看不太懂
可以大略講一下嗎
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)