2013-09-23 56 views
-1

我在Excel中寫了一個非常簡單的宏以刪除一些尾隨過多的文本。這裏是代碼:對VBA性能的失望

Sub remove_excess_names_from_part_number() 
    Dim i As Integer 
    Application.ScreenUpdating = False 
    For i = 1 To 1000 
     Cells(i, 3).Value = Left(Cells(i, 3).Value, 10) 
    Next i 
    Application.ScreenUpdating = True 
End Sub 

我看不出如何能得到任何簡單的,但我對這個代碼段表現不佳的失望。 VBA是否對這樣的簡單代碼做了一些優化?

+2

與電子表格的交互速度非常慢:一次加載數據,操作並重新放回電子表格一次。 – assylias

回答

3

試試下面的代碼:

C列的結果列和數據是在A列

Sub remove_excess_names_from_part_number() 
    Application.ScreenUpdating = False 

    Dim lastRow As Long 
    lastRow = Range("A" & Rows.Count).End(xlUp).Row 
    Range("C1:C" & lastRow).FormulaR1C1 = "=Left(RC[-2],10)" 
    Application.ScreenUpdating = True 
End Sub 
+0

+ 1好主意:) –

+0

哇,快得多!感謝你及時的答覆! –

3

你真的需要VBA這個?如果你願意,你可以使用Excel的文本到列

假設數據是這樣的在Excel

enter image description here

  1. 選擇列,點擊數據|文本到列
  2. 選擇Fixed Width在3
  3. 步驟1中設置的3步驟2的長度如果你看到下面,我已經設置它10
  4. 單擊Finish和你做。

enter image description here

注意:如果10字符是SPACE那麼它將在第2行

enter image description here

截斷,如果您還想要一個VBA解決方案,然後我會建議將整個範圍作爲@assylias建議加載到Array中,然後在執行計算後將其放回。

@Santosh也給了你一個建議,你可以一次性輸入公式到所有單元格。如果您可以使用非VBA選項,那麼您可以手動輸入公式並自動填充:)

+0

有趣的解決方案,我不知道。謝謝。我將測試哪種解​​決方案更符合我的需求。 –

+1

如果您對非VBA解決方案開放,那麼直接在電子表格中輸入幾千行的公式並執行自動填充是最佳選擇。如果您有非常大的數據,那麼與公式或VBA代碼相比,「文本到列」會更快。 –

+0

+1非常好的非代碼解決方案 – brettdj