返回列表 上一主題 發帖

[發問] 執行速度過慢 如何簡化

[發問] 執行速度過慢 如何簡化

本帖最後由 lyc43210 於 2015-4-12 17:36 編輯

大家好 我是剛學習vba的新手
有問題想請教

有一個工作表
偶數列的資料要移到上面奇數列後面補齊
不過奇數列最後一格不是完全空的 有個空白
補齊後每列的長度都是相同的

Ex.
[1234 ]
[123]
[123456 ]
[1]
     ↓
[1234123]
[1234561]

目前我是這樣寫
  1. Sub hm()
  2.    
  3.     i% = 1
  4.    
  5.     Do
  6.         c = Cells(i, 1).End(xlToRight).Column
  7.         If c < 11 Then

  8.             a = Range(Cells(i + 1, 1), Cells(i + 1, 10))
  9.             Range(Cells(i, c), Cells(i, 11)) = a
  10.             Rows(i + 1).Delete
  11.         End If
  12.         
  13.         i = i + 1
  14.     Loop Until Cells(i, 1) = ""
  15.    
  16. End Sub
複製代碼
能夠達成我想要的目的
可是執行速度太慢了
工作表資料有十幾萬列
我執行10分鐘只能完成將近1/3
想請教該如何簡化 使速度加快完成

謝謝大家

回復 2# luhpro

謝謝你提供的建議
確實有簡化了
可是不知為何 執行的速度反而更慢了

還是說
我原先的邏輯想法 執行速度本來就不佳
要達到同樣目的
其實有更好的寫法可以實作

TOP

嗯?
變的更慢了嗎?

我想我大概知道原因,
因為計算式變多了,
若資料筆數不多則差異不大,
你的資料量 ...
luhpro 發表於 2015-4-13 22:00


謝謝你的建議
不過速度都沒明顯提升

我也試著照你的建議 一次一項修改嘗試
發現速度有較明顯差異的寫法 反而卻是
  1. a = Range(Cells(i + 1, 1), Cells(i + 1, 10))
  2. Range(Cells(i, c), Cells(i, 11)) = a
複製代碼
這樣看起來較冗長
可是我不知道為何 卻會比cut或copy只要一行就夠了還快一些


-------
你的理解是對的 我想達成的目的就是這樣
也感謝Hsieh大
執行很快就完成了 可惜不是我要的結果

TOP

        靜思自在 : 人要知福、惜福、再造福。
返回列表 上一主題