2012-04-09 64 views
1

我正在使用奇怪空間作爲千位分隔符的工作簿。包含此分隔符的數字被Excel視爲文本。當我使用查找&替換工具刪除此分隔符時,數字會被正確識別爲數字。當我使用VBA執行相同的操作時,使用Cells.Replace方法,這些數字將保存爲文本。一個綠色的角落出現在包含這些數字的單元格上,允許我將它們轉換爲數字格式,但是這個選項在VBA中似乎沒有被利用,因爲這個動作沒有被宏記錄器記錄。在VBA中使用Replace方法將字符串存儲爲字符串

我可能會將我的工作表的單元格複製到數組,然後遍歷值以替換千位分隔符,然後將數組粘貼回工作表。我的問題是:是否有更有效的方法來刪除這些數千個分隔符,以便將我的數字視爲數字?

+1

您可以上傳只用5個細胞充滿了一個示例工作簿,所以我們可以看到,奇怪的字符是什麼?您可以在wikisend.com上載示例文件並在此處分享鏈接。 – 2012-04-09 16:57:40

+1

我假設奇怪的空間是Chr(160),這是非休息空間,但是無論你是否知道能夠替換它。我能想到的最好的方法是使用Finding爲包含奇怪空間的每個單元格設置「Rng」。如果'Rng'不是'Nothing','Rng.Value = Val(替換(Rng.Value,StrangeSpace,「」))'以消除奇怪的空間並強制評估結果。 – 2012-04-09 17:00:57

+0

@SiddharthRout:[鏈接](http://wikisend.com/download/131700/sample.xlsx) – Cutter 2012-04-09 17:16:30

回答

0

數與非休息空間,千位分隔符和昏迷作爲小數點分隔符被存儲作爲文本。使用VBA中的Cells.Replace方法刪除空格不會將值轉換爲數字格式,而是將其保存爲文本。該解決方案第二次使用Cells.Replace來替換帶有VBA點的逗號以將值作爲數字處理,並將其作爲數字複製到工作表中。然後,Excel根據區域設置對數字進行格式化(如有必要,用逗號替換點)。

3

您的意思是單元格B3和B5中9和5之間的空格?如果是,那麼只是刪除空間不會解決問題。您還需要刪除逗號以將其轉換爲數字,然後使用適當的千位分隔符對其進行格式化。看到這個代碼和快照

快照

enter image description here

CODE

Sub Sample() 
    With Sheets("Feuil1").Columns(2) 
     .Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:= _ 
     xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 

     .Replace What:=",", Replacement:="", LookAt:=xlPart, SearchOrder:= _ 
     xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 

     .NumberFormat = "#,##0" 
    End With 
End Sub 

HTH

+0

我意識到解決方案必須適用於任何區域設置。我的系統的小數點分隔符是彗星(,),因此,使用查找和替換工具(無VBA)刪除空間足以讓Excel將該值視爲數字。但是,VBA的內部小數點分隔符似乎是(。)的點,因此,當我像使用.Replace方法一樣使用VBA時,VBA認爲它正在處理字符串,並將編輯後的值作爲字符串複製回單元格。這就是爲什麼在使用.Replace方法後,我得到了綠色的角落,建議將單元格轉換爲數字格式。 – Cutter 2012-04-09 18:54:27

+0

...因爲我不能使用.Replace方法,所以最好的解決方案似乎是將Range的值複製到一個數組中,刪除空格並用'Application.DecimalSeparator'替代逗號,然後將數組複製回範圍。一個問題是,這會刪除用於在表格中強制進行文本轉換的任何前導撇號,因爲它不包含在.Value或.Formula屬性中。 – Cutter 2012-04-09 19:00:12

+0

另一種方法是記錄一個宏:)然後手動將數據在9和5之間複製。然後進行替換。同樣替換小數點分隔符。看看宏觀吐出的是什麼? – 2012-04-09 19:04:48

1

以上答案是正確的。 問題來自Excel區域設置。 (即:在法國,數字格式爲1234,56,而英文版Excel中爲1234.56) 使用查找&替換工具,不會影響區域設置。

但是,當使用VBA以逗號替換點時,VBA以英語爲基礎將所有數字設置爲字符串。 如果您將分隔符替換爲點,數字將顯示在區域設置之後(英語設置的點數,法國的昏迷)。

希望這有助於