在 VBA excel 中动态设置单元格的 NumberFormat [关闭]
Posted
技术标签:
【中文标题】在 VBA excel 中动态设置单元格的 NumberFormat [关闭]【英文标题】:Dynamically setting of cells' NumberFormat in VBA excel [closed] 【发布时间】:2020-07-12 06:41:50 【问题描述】:我需要动态地通过 VBA NumberFormat 设置导入的 txt 文件值,如下所示: 导入值数字类型是“常规”,所以我想更改为“数字”但保留小数点
12.324 ................... 3 个小数点 2.12 ................... 2 个小数点 0.00123 .........................5 个小数点 12.1234567 ..................... 7 个小数点
所有数据都在同一列中。
代码很简单:
Range("A1").Numberformat ="##0.0##"
Range("A2").Numberformat ="#0.0#"
Range("A3").Numberformat ="#0.0####"
Range("A4").Numberformat ="##0.0######"
所以我需要动态设置“#”
好的,我知道了。
res_dec_point = Len(Split(res_val & ",", ",")(1))
kes_dec_point = Len(Split(kes_val & ",", ",")(1))
MyNumberFormat_res = "0."
For i_num = 1 To res_dec_point
MyNumberFormat_res = MyNumberFormat_res & "0"
Next i_num
MyNumberFormat_kes = "0."
For i_num = 1 To kes_dec_point
MyNumberFormat_kes = MyNumberFormat_kes & "0"
Next i_num
谢谢https://***.com/users/10968406/bdra
【问题讨论】:
您的问题不清楚,但每个单元格都有自己的.NumberFormat
属性,您可以轻松地在代码中设置它。你试过吗?您的问题中没有包含任何代码,因此很难为您提供帮助。
您不需要 #
标志 - 只需删除它们即可。要格式化为 5 位小数,您只需使用 `"0.00000" - 动态设置它们取决于您如何确定所需的小数位数,并且您没有在问题中包含它。
每个数字都有它的小数位。所以很难设置。每个数字的精度不同,因此需要动态设置小数点。 12.12 不等于 12.12000。
如果您希望它们各自显示其原始格式,则不要使用任何格式。
但是如何转换为数字格式?一般格式不适合。因为我需要小数的准确性。
【参考方案1】:
简而言之,据我了解,您的代码需要读取格式化为字符串值的十进制数字,然后将它们写入格式化为十进制数字的目标单元格。每个目标单元格的格式需要与原始字符串值中的小数位数一样多。
您没有在问题中包含您的代码,因此我不会提供完整的代码作为回应,但概括来说,这是一种解决方法:
标识原始字符串值中的小数位数。使用Instr
函数定位小数点,然后统计小数点右边的数字个数。
数字格式本身表示为字符串值。例如,在Range("A1").Numberformat ="0.0"
中,“0.0”部分是一个字符串。您可以利用它来发挥自己的优势。查找或动态生成表示每个单元格所需数字格式的字符串值。
将数字格式分配给目标单元格。
这是一个 sn-p,它生成并分配具有可变小数位数的数字格式:
Dim MyNumberFormat As String, NumberOfDecimals As Integer
MyNumberFormat = "0."
For i = 1 To NumberOfDecimals
MyNumberFormat = MyNumberFormat & "0"
Next
MyWorksheet.Cells(1, 1).NumberFormat = MyNumberFormat
我相信这回答了您问题的核心。您需要使用自己的代码构建它,定义 NumberOfDecimals 为 0 时会发生什么,等等。
【讨论】:
谢谢你,这就是我要找的。 MyNumberFormat = MyNumberFormat & "0" @iincitr:好的,很好。如果它解决了问题,请不要忘记接受答案。【参考方案2】:值的格式不会改变值
在此示例中,我们计算 2/3
,并使用“通用格式”和 3,4 或 5 位小数显示它。
在最后一行,我们从第一行的值中减去 0.666
。绿色值都是“通用格式”。
结论:格式化不会改变值!
【讨论】:
谢谢,但准确性对我很重要。请考虑 ActiveWorkbook.PrecisionAsDisplayed = True以上是关于在 VBA excel 中动态设置单元格的 NumberFormat [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA自动创建sheet,设置字体,单元格颜色和边框
Excel VBA 根据下拉框单元格的值来改变另一个下拉框单元格的值