首页 > 解决方案 > 两次使用“TextToColumns”时不需要的更改

问题描述

我有以下问题。

我的一张表包含一列,其中包含存储为文本的值(例如,值作为 1,22 存储为文本)。目前我使用以下代码将这些条目转换为值:

Sub Convert()
    Range(Cells(2, "K"), Cells(Rows.Count, "K").End(xlUp)).TextToColumns DataType:=xlFixedWidth, DecimalSeparator:=","
End Sub

如果我在结果很好后运行宏。但是,如果我第二次运行宏(在我已经使用上面显示的代码将文本转换为值之后)。这些数字的格式从作为小数点分隔符的逗号“,”变为点“。” 作为小数分隔符(例如 1,22 --> 1.22)。

这是一个问题,因为我的区域使用逗号。

有谁知道如何防止这种情况发生?

亲切的问候阔边帽

这里截图:

原始数据@
原始数据

在第一次 text2columns 之后:
在第一次 text2columns 之后

在第二次 text2columns 之后:
第二次 text2columns 之后

标签: excelvba

解决方案


您的原始数据是字符串,运行TextToColumns会将它们转换为数字。第二次运行TextToColumns时,Excel 需要先将这些数字转换为字符串。

我只能猜测这种转换的内部逻辑,但如果这不使用任何区域设置,我也不会感到惊讶。

无论如何,我会说TextToColumns在数值上使用命令不是一个好主意。使用过滤器仅获取包含文本的单元格:

Dim r As Range
set r =  Range(Cells(2, "K"), Cells(Rows.Count, "K").End(xlUp))
On Error Resume Next     ' To prevent runtime error "No cells found"
Set r = r.SpecialCells(xlCellTypeConstants, xlTextValues)
If err.Number = 1004 then exit sub
On Error Goto 0
r.TextToColumns DataType:=xlFixedWidth, DecimalSeparator:=","

推荐阅读