Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将sci格式的数字转换为excel中的字符串_Excel - Fatal编程技术网

将sci格式的数字转换为excel中的字符串

将sci格式的数字转换为excel中的字符串,excel,Excel,我需要在Excel函数中将一列字母数字值转换为字符串。CStr(value)工作正常,除非该值类似于123E4。在这种情况下,Excel将该值视为1230000,并返回字符串“1230000”。使用格式(值“#”)会产生相同的结果。我想要的结果是字符串“123E4” 我怎么能得到这个 输入单元格是从网站下载的。它们使用“通用”格式。我将单元格中的值传递给以下函数 Function Var2Str(varA1 As Variant, Optional strFmt As String = "#")

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

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

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

在这个问题上的变化在这里很常见。一盎司的预防抵得上一磅的治疗。因此,最好是预防问题,而不是事后设法解决问题:

为了防止Excel将某些看起来像数字或日期的字母数字数据转换为数字或日期,您必须导入,而不是打开文件。执行此操作时,文本导入向导将打开,您可以在excel执行转换之前将列指定为文本

具体如何操作取决于您的Excel版本。在较新的版本中,它将位于
数据
功能区的
获取和转换
选项卡上,可能会说类似于
From Text/CSV

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

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

然后我使用上述方法得到了这个结果:


这个问题在这里很常见。一盎司的预防抵得上一磅的治疗。因此,最好是预防问题,而不是事后设法解决问题:

为了防止Excel将某些看起来像数字或日期的字母数字数据转换为数字或日期,您必须导入,而不是打开文件。执行此操作时,文本导入向导将打开,您可以在excel执行转换之前将列指定为文本

具体如何操作取决于您的Excel版本。在较新的版本中,它将位于
数据
功能区的
获取和转换
选项卡上,可能会说类似于
From Text/CSV

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

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

然后我使用上述方法得到了这个结果:


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

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

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