2017-08-11 109 views
1

我需要將一列字母數字值轉換爲Excel函數中的字符串。 CStr(價值)工作正常,除非值是類似於123E4。在這種情況下,Excel將該值視爲1230000並返回字符串「1230000」。使用格式(值,「#」)會得到相同的結果。我想要的結果是字符串「123E4」。將sci格式的數字轉換爲excel中的字符串

我怎樣才能得到這個?

輸入單元格從網站下載。他們使用「常規」格式。我將單元格中的值傳遞給以下函數。

Function Var2Str(varA1 As Variant, Optional strFmt As String = "#") As String 
Dim strTry As String 
Dim strMsg As String 
Debug.Print varA1, VarType(varA1), TypeName(varA1) 
strTry = CStr(varA1) 
Select Case VarType(varA1) 
Case vbDouble 
     strTry = Format(varA1, strFmt) 
Case vbString 
    'no further action 
Case Else 
    strMsg = "Unhandled VarType in Var2Str" _ 
     & vbCrLf & vbTab & "vara1 = " & varA1 _ 
     & vbCrLf & vbTab & "varType = " _ 
     & VarType(varA1) & vbCrLf & vbTab _ 
     & "TypeName = " & TypeName(varA1) 
    MsgBox strMsg, vbOKOnly, "Information" 
End Select 
Var2Str = strTry 
Debug.Print Var2Str 

端功能

+0

包含輸入值的單元格是如何格式化的? –

+0

將「123E4」格式化爲文本,我得到相同的值「123E4」。您可以嘗試'format(cell,cell.numberformat)',具體取決於您的單元格格式。可能有助於顯示您在上下文中使用的實際代碼。 –

+0

他們究竟如何將它們下載到Excel中?下載的文件是如何將工作表中的單元格設置爲'General'格式的?在將數據放置在工作表上之前,您需要將單元格格式化爲文本*,或者告訴Excel將該條目作爲文本進行處理。 –

回答

0

你可以嘗試(1)讓你在一個字符串看,並用它來設定目標單元格的值(2)。

Sub test_format2() 
    Dim r As Range, r1 As Range 
    Set r = Selection 
    For Each r1 In r 
     Dim n1 As String 
     n1 = r1.Text        ' (1) 
     r1.Offset(0, 1).Formula = "'" & n1  ' (2) 
    Next r1 
End Sub 

這似乎是唯一的防彈選項。例如,當改變列寬時,1.2e8似乎是一個具有挑戰性的情況。

0

這個問題的變化在這裏很常見。一盎司的預防值得一磅治療。所以最好避免,而不是試圖在事後治癒的問題:

爲了防止Excel轉換看起來像數字或日期某些字母數字數據,進入數字或日期,則必須IMPORT而比開放該文件。當你這樣做時,文本導入嚮導將打開,你可以指定該文本,然後 excel進行轉換。

具體如何做到這一點取決於您的Excel版本。在更新版本中,它將位於Data功能區的Get & Transform選項卡上,並可能會顯示類似From Text/CSV的內容。

如果您需要自動執行此操作,您可以在錄製VBA宏時進行錄製。

enter image description here

我進入你上面使用記事本文檔中列出的值,並將其保存爲csv文件。

然後我用上面的方法,得到了這樣的結果:

enter image description here

0

對我來說,最好的解決辦法是使用Workbook.OpenText打開下載的文件,並使用字段信息參數,以迫使相關列將被格式化爲文本。唯一的技巧是確保下載的文件名具有擴展名.txt,not.csv。由於未知原因,無論文件內容如何,​​VBA都不會尊重fieldinfo參數以打開擴展名爲.csv的文件。

相關問題