2016-03-07 78 views
0

我試圖使用修剪功能而沒有成功。在網上搜索這個論壇和其他資源的解決方案後,我看到了許多不同的方法。使用VBA在循環中修剪單元格

VBA中是否沒有簡單的方法修剪單元格?

我想是這樣的:

Sub trimloop() 

Dim row As Integer 

row = 1 

Do While Cells(row, 1) <> "" 

    Cells(row, 2) = trim(Cells(row, 2)) 

    row = row + 1 

Loop 

所以,當有A列中的值(1)在B列的值(2)應修剪任何多餘的空格中。我只是不能讓這個爲我工作。

感謝任何幫助/提示!

問候 吉姆

回答

2

所以我做了一下代碼,準確和mistakeproof和它的工作。

所以我可以推薦你仔細檢查,如果你有正確的行和列的值,因爲你可能定位錯誤的細胞。 (使你的代碼工作)

Sub trimloop() 

Dim row As Integer 
Dim currentSheet As Worksheet 
Set currentSheet = sheets("Sheet1") 

row = 2 

Do While currentSheet.Cells(row, 1) <> "" 

    currentSheet.Cells(row, 2).Value = Trim(currentSheet.Cells(row, 2).Value) 

    row = row + 1 

Loop 

End Sub 
+0

謝謝!我確實是針對錯誤的單元格。facepalm。你爲什麼要設置currentSheet部分並使用當前表?代碼將在默認情況下運行當前活動工作表嗎? – JimJimL

+1

我只是這樣做:)我看到了許多錯誤代碼造成的非正確的參考,並針對錯誤的表,我寧願每次都這樣做。另外,當我看了科迪一段時間後,我仍然知道我想做什麼。 –

+0

如果沒有完全參考工作表,當您說'Cells(row,1)'時,您可以參考任何工作簿當前處於活動狀態的活動工作表。通過完全限定參考資料(本人將以'ThisWorkbook.Sheets(「Sheet1」)'的身份),您確保Excel不會「猜測」您的意思。希望這可以幫助! – asongtoruin

1

使用Application.WorksheetFunction.Trim(string)

Sub trimloop() 

Dim row As Integer 

row = 1 

With ThisWorkbook.ActiveSheet 
Do While .Cells(row, 1) <> "" 

    .Cells(row, 2) = Application.WorksheetFunction.Trim(.Cells(row, 2)) 

    row = row + 1 

Loop 
End With 
End Sub 
+0

感謝您的答覆。我注意到Lubos指出這是針對細胞的一個簡單的錯誤。我可以問你爲什麼要使用ThisWorkbook.ActiveSheet?它有什麼不同? – JimJimL

1

這是你的代碼的優化版本,在大數據表的情況下:

Option Explicit 

Sub trimloop() 

Dim row As Long, max As Long 
Dim Data() As Variant 

With ThisWorkbook.Sheets(1) 

    max = .Cells(1, 1).End(xlDown).row 'this does the same as your code, on first empty cell it stops 
    'the following finds the last un-empty cell of column(1): 
    'max= .cells(.rows.count,1).end(xlup).row 

    'copies values from sheet to memory (is faster for working with later) 
    Data = .Range(.Cells(1, 1), .Cells(max, 2)).Value2 

    'loop : 
    For row = 2 To max + 1 

     'work with memory instead of sheet 
     Data(row, 2) = Trim(Data(row, 2)) 
     'for complete delete of all spaces use : = replace(StringName," ", "") 

    Next row 

    'write back to sheet 
    .Range(.Cells(1, 1), .Cells(max, 2)).Value2 = Data 

End With 

erase Data 'free memory 

End Sub 
相關問題