另存为 .csv 正确的小数点分隔符
Save as .csv correct decimal separator
我正在编写一个 "master" Excel 文档,该文档使用 Visual Basic for Applications 创建新工作簿并将它们保存为“.csv”。创建的工作簿包含来自两个来源的测量数据。一个来源已经在我的区域设置中提供了测量日期(荷兰,其中逗号 ,
通常用作小数点分隔符)。然而,另一个来源提供的数据以点 .
作为分隔符(美国设置)。我想将所有点号替换为逗号。
替换功能可以吗?
(我想这个解决方案只有在将其应用于大于 1.000,00(或美国设置为 1,000.00)的值时才会失败。这是可以接受的,但远非完美。
目前尝试次数
Application.DecimalSeperator = ","
- 在保存工作簿的行后
local = true
添加
另外
Excel 认为文本文档中的值有 1000 个分隔符 31.435。当我打开 1000 分隔符时,该值为 31435。我需要它为 31,435(十进制以逗号分隔,符号)
我需要调整单元格格式吗?
如果是这样,那么...如何?
还有其他解决方案吗?
Anwser/Sollution(最适合我)
Sheets(SheetNaamCNC).Range("B1").Select
Do While ActiveCell.Value <> ""
If InStr(ActiveCell.Value, "0,") = 0 Then
ActiveCell.Value = ActiveCell.Value / 1000
End If
ActiveCell.Offset(1, 0).Select
Loop
您可以使用如下函数
Sub sub1()
Application.DecimalSeparator = "."
Application.ThousandsSeparator = ","
Application.UseSystemSeparators = False
Plan1.Columns(1).NumberFormat = "#,##0.00"
End Sub
如果它以文本形式读取它们,您可以尝试
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(sheet1!A2,",","|"),".",","),"|",".")
如果我这样做,我会在新 sheet 的同一列中为我想重新格式化的每一列输入此公式,然后使用 [=12= 复制任何其他列]
=sheet1!B2 etc.
这是否是一个可行的解决方案取决于您有多少列。
已接受将 , 设置为分隔符。这适用于 0,234 之类的值,但 31,345 之类的值将失败。它们显示为 31.345(在本例中,. 作为千位分隔符)。 可能的解决方案 逐个循环遍历单元格。如果第一个字符不等于“0”,则将 ActiveCell.Value 除以 1000。
有点绕路……但我想它对我有用。
添加以下内容,
Sheets("YourSheetName").Range("TopOfRangeYouLikeToEdit").Select
Do While ActiveCell.Value <> ""
If Left(ActiveCell.Value, 1) <> "0" Then
ActiveCell.Value = ActiveCell.Value / 1000
End if
ActiveCell.Offset(1,0).Select
Loop
-Cornelis 编辑:
而不是 Left(ActiveCell.Value,1)<> "0"
If ActiveCell.Value < 0 Then
会更好
当您使用 数据 选项卡将文本文件读入 Excel sheet 时 > 获取外部数据 > From Text,您可以通过单击文本文件导入向导第 3 步中的 Advanced
按钮指定小数点和千位分隔符。
如果您在导入其中一个数据文件时录制宏,您将得到如下内容:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;myfilename.csv" _
, Destination:=Range("$A"))
.Name = "myfilename"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
.TextFileDecimalSeparator = ","
.TextFileThousandsSeparator = " "
.Refresh BackgroundQuery:=False
End With
然后您可以使用录制的代码开发您自己的宏,以正确的格式导入未来的数据文件 - 特别是 TextFileDecimalSeparator
和 TextFileThousandsSeparator
属性。
我正在编写一个 "master" Excel 文档,该文档使用 Visual Basic for Applications 创建新工作簿并将它们保存为“.csv”。创建的工作簿包含来自两个来源的测量数据。一个来源已经在我的区域设置中提供了测量日期(荷兰,其中逗号 ,
通常用作小数点分隔符)。然而,另一个来源提供的数据以点 .
作为分隔符(美国设置)。我想将所有点号替换为逗号。
替换功能可以吗?
(我想这个解决方案只有在将其应用于大于 1.000,00(或美国设置为 1,000.00)的值时才会失败。这是可以接受的,但远非完美。
目前尝试次数
Application.DecimalSeperator = ","
- 在保存工作簿的行后
local = true
添加
另外
Excel 认为文本文档中的值有 1000 个分隔符 31.435。当我打开 1000 分隔符时,该值为 31435。我需要它为 31,435(十进制以逗号分隔,符号)
我需要调整单元格格式吗?
如果是这样,那么...如何?
还有其他解决方案吗?
Anwser/Sollution(最适合我)
Sheets(SheetNaamCNC).Range("B1").Select
Do While ActiveCell.Value <> ""
If InStr(ActiveCell.Value, "0,") = 0 Then
ActiveCell.Value = ActiveCell.Value / 1000
End If
ActiveCell.Offset(1, 0).Select
Loop
您可以使用如下函数
Sub sub1()
Application.DecimalSeparator = "."
Application.ThousandsSeparator = ","
Application.UseSystemSeparators = False
Plan1.Columns(1).NumberFormat = "#,##0.00"
End Sub
如果它以文本形式读取它们,您可以尝试
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(sheet1!A2,",","|"),".",","),"|",".")
如果我这样做,我会在新 sheet 的同一列中为我想重新格式化的每一列输入此公式,然后使用 [=12= 复制任何其他列]
=sheet1!B2 etc.
这是否是一个可行的解决方案取决于您有多少列。
已接受将 , 设置为分隔符。这适用于 0,234 之类的值,但 31,345 之类的值将失败。它们显示为 31.345(在本例中,. 作为千位分隔符)。 可能的解决方案 逐个循环遍历单元格。如果第一个字符不等于“0”,则将 ActiveCell.Value 除以 1000。 有点绕路……但我想它对我有用。
添加以下内容,
Sheets("YourSheetName").Range("TopOfRangeYouLikeToEdit").Select
Do While ActiveCell.Value <> ""
If Left(ActiveCell.Value, 1) <> "0" Then
ActiveCell.Value = ActiveCell.Value / 1000
End if
ActiveCell.Offset(1,0).Select
Loop
-Cornelis 编辑:
而不是 Left(ActiveCell.Value,1)<> "0"
If ActiveCell.Value < 0 Then
会更好
当您使用 数据 选项卡将文本文件读入 Excel sheet 时 > 获取外部数据 > From Text,您可以通过单击文本文件导入向导第 3 步中的 Advanced
按钮指定小数点和千位分隔符。
如果您在导入其中一个数据文件时录制宏,您将得到如下内容:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;myfilename.csv" _
, Destination:=Range("$A"))
.Name = "myfilename"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
.TextFileDecimalSeparator = ","
.TextFileThousandsSeparator = " "
.Refresh BackgroundQuery:=False
End With
然后您可以使用录制的代码开发您自己的宏,以正确的格式导入未来的数据文件 - 特别是 TextFileDecimalSeparator
和 TextFileThousandsSeparator
属性。