2017-08-11 79 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的文件。

相关问题