繁体   English   中英

多种格式的小数位

[英]Decimal places for multiple formats

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

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

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 中变得更好,但还没有那么好;)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM