【问题标题】:VBA Replace not working for numbers over 1.0VBA 替换不适用于 1.0 以上的数字
【发布时间】:2017-12-07 16:08:32
【问题描述】:

我正在尝试制作一个采用所选单元格的宏,替换“。”用 ",",然后将其更改为 double,将其除以 2 并四舍五入。

单元格示例:

0.910 1.000

For Each Cell In Selection
    Cell.Value = Replace(Cell, ".", ",")
    Cell = CDbl(Cell.Value)
    Cell = Cell / 2
    Cell = Round(Cell, 4)
Next Cell

我希望得到:

0.4550 0.5000

问题是,如果我有一个大于 1.0 的数字,它只会删除“。”并且不会用任何东西替换它,并且由于单元格有 3 位小数,我突然得到 1000 而不是 1。

所以我得到:

0.4550 500

有什么错误的建议吗?

【问题讨论】:

  • 你试过Format(Cell,"#,0000")吗?
  • 你为什么不只是除以 2?
  • 你为什么要替换“.”带“,”?你得到你想要的;将“,”替换为“。”,然后将值加倍,将为您提供 1000。对于任何大于 1.0 的数字,您只需重新格式化单元格以仅显示 1 个小数位即可获得所需的结果。
  • 或者只使用Round函数。见Link
  • 嗨,@Brownish Monster - 试过了,没用。

标签: excel replace vba


【解决方案1】:

简单一点;归功于@njimack

For Each cell In Selection
    If IsNumeric(cell) Then cell.Formula = Round(cell.Value, 1)
Next cell

【讨论】:

    【解决方案2】:

    怎么样:

    Sub foo2()
    Dim cell As Range
    Dim value As Double
        For Each cell In Selection
            cell = Application.RoundUp(cell, 1)
            cell = CStr(cell.value)
            cell.NumberFormat = "@"
            If cell.value <> "1" Then
                cell.value = cell.value & "00"
            Else
                cell.value = cell.value & ",000"
            End If
            cell.value = Replace(cell.value, ".", ",")
        Next cell
    End Sub
    

    【讨论】:

    • 问题是我的电脑不理解“.”是十进制标记,而不是“千位标记”。重新格式化似乎无法解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2020-12-13
    • 2020-04-14
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多