将sci格式的数字转换为excel中的字符串
我需要在Excel函数中将一列字母数字值转换为字符串。CStr(value)工作正常,除非该值类似于123E4。在这种情况下,Excel将该值视为1230000,并返回字符串“1230000”。使用格式(值“#”)会产生相同的结果。我想要的结果是字符串“123E4” 我怎么能得到这个 输入单元格是从网站下载的。它们使用“通用”格式。我将单元格中的值传递给以下函数将sci格式的数字转换为excel中的字符串,excel,Excel,我需要在Excel函数中将一列字母数字值转换为字符串。CStr(value)工作正常,除非该值类似于123E4。在这种情况下,Excel将该值视为1230000,并返回字符串“1230000”。使用格式(值“#”)会产生相同的结果。我想要的结果是字符串“123E4” 我怎么能得到这个 输入单元格是从网站下载的。它们使用“通用”格式。我将单元格中的值传递给以下函数 Function Var2Str(varA1 As Variant, Optional strFmt As String = "#")
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文件时,所有列都采用常规格式。请参阅我编辑的文章,了解我使用的确切代码。无需将单元格重新格式化为文本。请看下面的答案。