在 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 根据下拉框单元格的值来改变另一个下拉框单元格的值

VB/VBA怎么修改 Excel 单元格的数据类型?

Excel中怎样通过vba快速标注哪些单元格的数据发生变化?

[VBA] excel获取单元格的超链接地址函数

从 vba 中的单元格地址获取 excel 合并单元格的值