【问题标题】:Issues with Trim function in VBA (Excel changing data after VBAtrim)VBA 中的 Trim 函数问题(VBAtrim 后 Excel 更改数据)
【发布时间】:2020-04-22 10:28:50
【问题描述】:

我在使用 Excel 修剪功能时遇到问题。很多时候,我提取的数据在信息字符串之后都带有额外的空格,例如“1234566”。我以前在 VBA 中使用过 trim 函数,它似乎做得很好,但是当涉及到只有数字的长字符串的单元格时,我偶然发现了一个问题。

代码如下:

Dim C As Range
For Each C In ActiveSheet.UsedRange
    With C
    C.Value = Trim (C)
    End With
Next C

这适用于大多数情况,但是例如,如果我在数字上使用此代码,右侧有空格“12355557899200123”,Excel 的修剪功能似乎是修剪,但通过切断来更改数字的值(不好)在这种情况下,最后几个数字 12355557899200123 变成 -> 12355557899200100 和 23 被 00 替换,这可能会导致以后计算错误:((((。

提前感谢您的帮助和建议!

【问题讨论】:

  • trim无关。这与主题浮点数有关。也许你开始阅读 herehere 关于这个主题。

标签: excel vba trim


【解决方案1】:

Excel 的精度为 15 位,请参阅 here 了解这些限制(向下滚动到计算规范和限制)。 12355557899200123 的长度为 17 位,这意味着当您将其放入 Excel 工作表时,您将丢失最后两位。

【讨论】:

    【解决方案2】:

    您的问题不是由Trim 本身引起的。您的原始单元格内容是String(否则不能有任何空格)。 Trim 本身也返回一个字符串,但是当您将结果分配给单元格时,Excel 将看到该字符串仅包含数字并自动将其转换为数字。这个数字表示为Double,并且具有简单的有限精度。手动在单元格中输入12355557899200123 会得到完全相同的结果。

    我能想到的唯一解决方法是将数字存储为字符串 (C.Value = "'" & Trim (C))。但是当您在 Excel 中进行计算时,您仍然会丢失最低有效数字。您必须在 VBA 中使用数据类型 Decimal 进行所有计算,然后将结果作为字符串写回单元格。要处理Decimal,您必须将变量声明为Variant,并使用函数CDec 将值(例如字符串)转换为小数。

    Dim v As Variant
    v = CDec(ActiveCell)
    v = v * 2
    ActiveCell.Offset(0, 1) = "'" & CStr(v)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-14
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多