【问题标题】:Decimal places for multiple formats多种格式的小数位
【发布时间】:2020-03-09 20:34:11
【问题描述】:

我正在尝试找出一种方法来增加/减少所选范围(一个或多个可能具有多种不同格式的单元格)的小数位数。

到目前为止,我的代码如下:

Dim myformat As String
Dim cell As Range
Dim val As Variant

For Each cell In Selection
    val = cell.Value
    myformat = cell.NumberFormat

    If IsDate(val) = False Then
        If InStr(1, myformat, ".") > 0 Then
            myformat = myformat & "0"
        Else
            myformat = "0.0"
        End If
    End If
        cell.NumberFormat = myformat
Next cell

一般来说,它可以工作,但不是全部。我需要它做的是适用于百分比,一般,数字格式以及公式(不是直接放置单元格值)和自定义格式(无论我多么努力,我都无法绕过它......)。 当看到单元格包含时间/日期格式时,代码不应该工作(应该退出 sub 或什么都不做)(我设法做到了)。

您将在下面找到我正在开发宏的格式类型:

如您所见,我的编码方式(我正在努力学习)是通过读取现有格式并根据需要更改它来简单地编辑 NumberFormat。这适用于简单格式,但是当与自定义格式结合使用时?它只是不起作用。

有没有人有任何想法我该如何继续我的想法?任何帮助深表感谢! 预先感谢任何愿意在这方面帮助我的人。我每天都在 VBA 中变得更好,但还没有那么好;)

【问题讨论】:

  • 这将非常棘手。我认为与其检查不是什么,不如检查你喜欢的模式,然后添加小数。例如,看起来像 "000"#NumberFormat code 不一定会像您期望的那样受益。
  • 请显示所需的最终结果
  • “技巧”是我将其作为一个未解决问题发布的原因 :) NautMeg 我无法显示最终结果,因为这将能够简单地增加/减少任何数字格式的小数,同时忽略时间/日期类型。 @Marcucciboy2 这是我正在考虑的一种方式......但可能有几十种不同的自定义格式,我将仅限于我指定的几个......我正在寻找更“通用”的东西使用:)

标签: excel vba decimal


【解决方案1】:

对于已经包含小数点的自定义格式,而不是:

myformat = myformat & "0"

使用起来会更可靠:

myformat = replace(myformat,".",".0")

这将确保在所有小数点后添加一个额外的 0,包括具有多个部分的自定义数字格式,例如:

#,##0.00;[Red]-#,##0.00

在没有小数点的数字上添加小数点,而不是:

myformat = "0.0"

使用:

myformat = replace(myformat,"0","0.0")

请注意,它仍然无法处理所有可能的自定义数字格式,这需要大量的解析,但它应该根据您的示例处理标准类型的格式。

要删除小数点,请执行相反的操作:

myformat = replace(myformat,".0",".")

这会在删除所有零后留下一个小数点,但是可以通过检查数字格式是否包含不跟零的小数点来处理:

If InStr(myformat, ".") > 0 and InStr(myformat, ".0") = 0 then
    myformat = replace(myformat,".","")
End if

【讨论】:

  • 您的“替换”想法是金句,谢谢!我意识到这将很难创建一个宏来增加每种可能的自定义格式的小数点......但是,你知道如何增加自定义格式的小数点,如 0“点”或 0“百分比”吗?普通数字格式加上括号中的附加文本。如果有小数,我的代码可以工作,但如果我没有小数,并且格式中没有 DOT 字符串,它只会输入 0.0(如我的代码中所示)。你知道如何绕过这个限制吗?我正在尝试多种事情,但无法找到任何特定的东西......
  • 我使用了这个语句:// myformat = Replace(myformat, "0", "0.0") // 它似乎有效,因为我取一个 0 并添加小数。当我正在测试时,它似乎没问题,但我担心它不可靠。还有其他可行的想法吗?
  • 在检查不存在小数点之后,将 0 替换为 0.0,是我能想到的最佳方法。你有什么不工作的例子吗?
猜你喜欢
  • 2016-01-26
  • 2017-05-21
  • 2011-03-27
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
相关资源
最近更新 更多