另存为 .csv 正确的小数点分隔符

Save as .csv correct decimal separator

我正在编写一个 "master" Excel 文档,该文档使用 Visual Basic for Applications 创建新工作簿并将它们保存为“.csv”。创建的工作簿包含来自两个来源的测量数据。一个来源已经在我的区域设置中提供了测量日期(荷兰,其中逗号 , 通常用作小数点分隔符)。然而,另一个来源提供的数据以点 . 作为分隔符(美国设置)。我想将所有点号替换为逗号。

替换功能可以吗?

(我想这个解决方案只有在将其应用于大于 1.000,00(或美国设置为 1,000.00)的值时才会失败。这是可以接受的,但远非完美。

目前尝试次数

另外

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

然后您可以使用录制的代码开发您自己的宏,以正确的格式导入未来的数据文件 - 特别是 TextFileDecimalSeparatorTextFileThousandsSeparator 属性。