【问题标题】:Convert number in sci format to string in excel将sci格式的数字转换为excel中的字符串
【发布时间】:2017-08-11 23:45:16
【问题描述】:

我需要在 Excel 函数中将一列字母数字值转换为字符串。 CStr(value) 工作正常,除非该值类似于 123E4。在这种情况下,Excel 将该值视为 1230000 并返回字符串“1230000”。使用 Format(value,"#") 产生相同的结果。我想要的结果是字符串“123E4”。

我怎样才能得到这个?

输入单元格是从网站下载的。他们使用“常规”格式。我将单元格中的值传递给以下函数。

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

结束函数

【问题讨论】:

  • 包含输入值的单元格是如何格式化的?
  • 将“123E4”格式化为文本,我得到相同的值“123E4”。您可以尝试format(cell, cell.numberformat),具体取决于您的单元格格式。可能有助于显示您在上下文中使用的实际代码。
  • 它们究竟是如何下载到 Excel 中的?下载的文件如何将工作表中的单元格设置为General 格式?您需要将单元格格式设置为文本之前将数据放置在工作表上,或告诉 Excel 将条目视为文本。
  • 我将一个数据表导出到一个 .csv 文件,然后运行几个 VBA 程序来分析它。 .csv 文件中的一列包含字母数字值,例如 123876、23XY45、123E4。默认情况下,在 Excel 中打开 .csv 文件时,所有列都具有常规格式。有关我正在使用的确切代码,请参阅我编辑的帖子。
  • 无需将单元格重新格式化为 TEXT。请看下面的答案。

标签: excel


【解决方案1】:

您可以尝试 (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 似乎是一个具有挑战性的案例。

【讨论】:

    【解决方案2】:

    这个问题的变体在这里很常见。一盎司的预防胜过一磅的治疗。所以最好是预防问题,而不是事后试图解决它:

    为了防止 Excel 将某些看起来像数字或日期的字母数字数据转换为数字或日期,您必须导入而不是打开文件。当您这样做时,文本导入向导将打开,您可以将列指定为文本 before excel 进行转换。

    具体如何执行此操作取决于您的 Excel 版本。在较新的版本中,它将位于Data 功能区上的Get & Transform 选项卡上,可能会显示类似From Text/CSV 的内容。

    如果您需要自动执行此操作,您可以在执行此操作时录制 VBA 宏。

    我使用记事本在文档中输入了您上面列出的值,并将其保存为 csv 文件。

    然后我用上面的方法得到了这个结果:

    【讨论】:

      【解决方案3】:

      对我来说,最好的解决方案是使用 Workbook.OpenText 打开下载的文件并使用 fieldinfo 参数强制将相关列格式化为文本。唯一的技巧是确保下载的文件名具有扩展名 .txt,而不是 .csv。由于未知原因,无论文件内容如何,​​VBA 都不会尊重 fieldinfo 参数来打开扩展名为 .csv 的文件。

      【讨论】:

        猜你喜欢
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-01
        • 2011-11-28
        • 1970-01-01
        • 1970-01-01
        • 2017-02-07
        相关资源
        最近更新 更多