2013-02-28 230 views
0

假設下面的Excel表:如何從每個Excel單元格中刪除前導空格?

| A 
--+----- 
1 |foo bar 
2 | bar baz 
3 | baz 
4 | bam 

我需要一種方法來自動刪除所有領先空間:

| A 
--+----- 
1 |foo bar 
2 |bar baz 
3 |baz 
4 |bam 

我無法找到一個Excel的功能來做到這一點。誰能幫我嗎?

+3

Excel確實有'TRIM'功能,但它刪除所有前導,尾隨和多餘的空間... – luiges90 2013-02-28 13:25:48

+0

謝謝。我現在在單元格'B1'中應用公式'= TRIM(A1)',並將其擴展到列的下方。在第二個音符上,你知道我怎麼可以用[返回]替換第一個空格(在刪除前導空格後)?所以它變成'foo [return] bar'例如? – Pr0no 2013-02-28 13:38:08

+1

如果您擔心刪除多餘空間,可以使用VBA中的RTrim和LTrim創建自己的函數。 – 2013-02-28 13:41:10

回答

2

如果你想保持轉換值的單元格,以及在[return]對之間的接話使用下面的代碼空間:

'DECLARE VARIABLES 
Dim myRng As Range, c As Range 

'INITIALIZE VARIABLES 
Set myRng = Range("A1:A4") 

'LOOP THRU RANGE 
For Each c In myRng.Cells 
    'TRIM LEADING AND TRAILING SPACES 
    c.Value = LTrim(c.Value) 
    c.Value = RTrim(c.Value) 
Next c 

'ADD RETURN SPACE 
myRng.Replace What:=" ", Replacement:=Chr(10), LookAt:=xlPart 
+0

非常感謝! – Pr0no 2013-02-28 15:01:32

+0

最好把它寫到一個數組中,在那裏處理它,然後將它轉儲回範圍 - 範圍循環可能非常緩慢 – brettdj 2013-03-01 11:03:11

+0

@brettdj這是關於性能的一個很好的觀點。對於這個範圍,我更喜歡上面的代碼,因爲代碼更加簡潔。但是,對於更大的範圍,我建議訪問此[鏈接](http://www.cpearson.com/excel/ArraysAndRanges.aspx),以獲取使用數組時使用範圍值的示例。 – Taliesin 2013-03-01 16:45:07

2

使用=Trim(A1)可以從字符串的任意一邊去除空白字符。

要使用換行符替換剩餘的空白字符,你可以使用=SUBSTITUTE(A1," ",[X])其中[X]是一個:

  • Char(10) {作爲換行符}
  • Char(13) {回車符}
  • [type] Alt+Enter手動將換行符插入Excel單元格中

幫助參考

TRIM(text) 刪除文本中所有的空格,除了單詞之間的單個空格。

SUBSTITUTE(text, old_text, new_text, [instance_num])以文本字符串替換new_textold_text

1

您可以用數組的方式非常快速地完成下面避免了完全循環

雖然代碼有效地可以在一個單獨的長行中運行,但爲了清晰起見,我已將其分解出來。

這將更新單元格到原始範圍的右側。

Sub UpDateIt() 
    Dim rng1 As Range 
    Dim strText As String 
    strText = "," 
    Set rng1 = Range([a1], Cells(Rows.Count, "A").End(xlUp)) 
    With Application 
     x = Replace(Replace(.Trim(Join(.Transpose(rng1), strText)), ", ", ","), Chr(32), Chr(10)) 
     rng1.Offset(0, 1) = .Transpose(Split(x, strText)) 
    End With 
End Sub 
+0

+1爲高效的代碼。 – Taliesin 2013-03-05 18:58:36

相關問題