VBA excel 考虑不确定性计算时动态设置单元格的 NumberFormat
Dynamically setting of cells' NumberFormat in VBA excel when the uncertainty calculation in consideration
我需要 动态 通过 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
值的格式不会改变值
在此示例中,我们计算 2/3
,并使用 'General format' 并使用 3,4 或 5 位小数来显示它。
在最后一行,我们从第一行的值中减去 0.666
。绿色值都在'General format'.
结论:格式化并没有改变数值!
简而言之,据我了解,您的代码需要读取格式化为字符串值的十进制数字,然后将它们写入格式化为十进制数字的目标单元格。每个目标单元格的格式需要与原始字符串值中存在的小数位数一样多。
你没有在问题中包含你的代码,所以我不会提供完整的代码作为回应,但这里概述了一种处理它的方法:
识别原始字符串值中的小数位数。使用Instr
函数定位小数点,然后统计小数点右边的数字个数。
数字格式本身表示为字符串值。例如,在 Range("A1").Numberformat ="0.0"
中,“0.0”部分是一个字符串。您可以利用这一优势。查找或动态生成一个字符串值,表示每个单元格所需的数字格式。
将数字格式分配给目标单元格。
这是一个生成和分配小数位数可变的数字格式的代码片段:
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 时会发生什么,等等。
我需要 动态 通过 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
值的格式不会改变值
在此示例中,我们计算 2/3
,并使用 'General format' 并使用 3,4 或 5 位小数来显示它。
在最后一行,我们从第一行的值中减去 0.666
。绿色值都在'General format'.
结论:格式化并没有改变数值!
简而言之,据我了解,您的代码需要读取格式化为字符串值的十进制数字,然后将它们写入格式化为十进制数字的目标单元格。每个目标单元格的格式需要与原始字符串值中存在的小数位数一样多。
你没有在问题中包含你的代码,所以我不会提供完整的代码作为回应,但这里概述了一种处理它的方法:
识别原始字符串值中的小数位数。使用
Instr
函数定位小数点,然后统计小数点右边的数字个数。数字格式本身表示为字符串值。例如,在
Range("A1").Numberformat ="0.0"
中,“0.0”部分是一个字符串。您可以利用这一优势。查找或动态生成一个字符串值,表示每个单元格所需的数字格式。将数字格式分配给目标单元格。
这是一个生成和分配小数位数可变的数字格式的代码片段:
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 时会发生什么,等等。