将sci格式的数字转换为excel中的string
我需要将一列字母数字值转换为Excel函数中的string。 CStr(value)工作正常, 除非值是123E4。 在这种情况下,Excel会将该值视为1230000并返回string“1230000”。 使用格式(值,“#”)产生相同的结果。 我想要的结果是string“123E4”。
我怎样才能得到这个?
input单元格从网站下载。 他们使用“通用”格式。 我将单元格中的值传递给以下函数。
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
结束function
你可以尝试(1)得到你看到的string,(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似乎是一个具有挑战性的情况。
这个问题的变化在这里很常见。 一盎司的预防值得一磅的治疗。 所以最好的防止问题,而不是试图治愈它的事实:
为了防止Excel将数字或date等字母数字数据转换为数字或date,您必须导入而不是打开文件。 当你这样做的时候,Text-import-wizard将会打开,你可以在 excel进行转换之前将该列指定为文本。
具体怎么做取决于你的Excel版本。 在更新的版本中,它将位于Data
function区的“ Get & Transform
选项卡上,并可能会显示“ From Text/CSV
。
如果您需要自动执行此操作,则可以在执行此操作时录制VBAmacros。
我使用记事本在文档中input了上面列出的值,并将其另存为csv文件。
然后我用上面的方法得到了这个结果:
对我来说,最好的解决scheme是使用Workbook.OpenText打开下载的文件,并使用fieldinfo参数来强制相关的列被格式化为文本。 唯一的技巧是确保下载的文件名具有扩展名.txt,not.csv。 由于未知的原因,不pipe文件内容如何,VBA都不会尊重fieldinfo参数来打开扩展名为.csv的文件。