2017-03-13 65 views
1

我使用的陣列來處理值(以及文本)我有一個片改變了細胞的格式效果:將數組轉儲回單元格時,單元格的格式將由Excel的默認行爲更改。例如,存儲爲以「0」開頭的文本的數字被轉換爲數字,並且「0」被刪除。或「1-11」等文字轉換爲日期(「11月1日」);並可能還有一些我還沒有發現的其他人。Excel VBA中用於處理範圍陣列

如果我監視本地窗口,琴絃被保留爲數組中的字符串,直到那一刻,所以它是食堂的事情了卸載。

是否有辦法避免這種行爲呢?

編輯:我也嘗試:

Application.ActiveSheet.UsedRange.Value = arr 
Application.ActiveSheet.UsedRange.Value2 = arr 
Application.ActiveSheet.UsedRange.text = arr 

每個相同的結果。

+0

你爲什麼不格式複製到一個空表粘貼前陣,然後粘貼(僅格式)回的範圍內? – Ralph

+0

我也這麼想過,但文字已經改變了;將格式粘貼回來不會在電話號碼前添加「0」;同樣,當轉換爲日期,文本已經被存儲爲一天的序列號(例如 - 「1-11」已經被轉換成價值42746;粘貼的格式不會改變這一回「1-11」 –

+0

然後你將不得不爲數組中的所有值添加一個'''你不希望被識別爲數字,但希望保留爲文本。有關更多信息,請閱讀:https://superuser.com/問題/ 806771 /爲什麼 - 會 - 所有文字列式-AN-Excel的電子表格開始上帶有一個領先的單-q – Ralph

回答

2

可以使用值類型選項保留格式等:11是xlRangeValueXMLSpreadsheet

Sub CopyWithFormat() 
Dim var As Variant 
var = Range("A8:A11").Value(11) 
Range("C8:C11").Value(11) = var 
End Sub 

但是,這將使它很難修改的數組中的值。 所以它可能是最簡單的循環數組添加「

Sub CopyWithFormat2() 
    Dim var As Variant 
    Dim j As Long 
    var = Range("A8:A11").Value 
    For j = 1 To UBound(var) 
     If VarType(var(j, 1)) = vbString Then var(j, 1) = "'" & var(j, 1) 
    Next j 
    Range("C8:C11").Value = var 
End Sub 
+0

的第一個選項確實讓人很難處理價值觀方面相當隨機約百第二個只能如果我處理字符串獨佔。如果我有數字和字符串混合,它會將所有內容轉換爲字符串,我需要保留任何格式該單元先前已將值加載到數組中。我不需要更改單元格格式 –

+0

當我測試它時,第二個選項不會將數字轉換爲字符串,並且正確處理數字和字符串以及格式(如貨幣,文本,日期,數字)的組合。 (確定不會複製數字的小數位格式,但它們被複製爲數字)。如果您繼續將數字轉換爲字符串,請提供一些測試數據。 –

+0

我糾正了,你是對的;我仍然在代碼中嘗試了我的.text失敗 –