excel - 使用 Excel VBA 创建数字序列的奇数错误
问题描述
我正在尝试采用一系列数字范围(即:.214-.217)并创建列出该范围内每个数字的 excel 文件。这是为了在 ODK XLSform 外部 CSV 参考文件中使用。
我遇到的问题是,当某些数字结束一个范围时,它们不会写入 excel 文件。范围的其余部分被写入,当这些数字出现在范围的开头或中间时,它们被写入,但在它们结束时不被写入。到目前为止,我发现发生这种情况的数字是:.217、.010、.012
最小和最大数字被存储在单精度浮点变量数组中。当我更改为双精度 FP 变量时,写入了 .217,但没有写入 .010 和 .012。
这是我的代码:
Sub BuildODKRange()
Dim PNStr As String
Dim MinMax(1 To 7) As Double
Dim CurrentDim(1 To 4) As Double
Dim CountInt As Integer
For Each Cell In Sheets("Data").Range("A2", Range("A65536").End(xlUp))
Cell.Activate
PNStr = Cell.Value
For CountInt = 1 To 7
MinMax(CountInt) = ActiveCell.Offset(0, CountInt)
Next CountInt
CurrentDim(1) = MinMax(1)
CurrentDim(2) = MinMax(3)
CurrentDim(3) = MinMax(5)
CurrentDim(4) = 0
While CurrentDim(1) <= MinMax(2)
Sheets("hss_parts_od").Range("A65536").End(xlUp).Offset(1, 0) = PNStr
Sheets("hss_parts_od").Range("B65536").End(xlUp).Offset(1, 0) = CurrentDim(1)
CurrentDim(1) = CurrentDim(1) + 0.001
Wend
While CurrentDim(2) <= MinMax(4)
Sheets("hss_parts_id").Range("A65536").End(xlUp).Offset(1, 0) = PNStr
Sheets("hss_parts_id").Range("B65536").End(xlUp).Offset(1, 0) = CurrentDim(2)
CurrentDim(2) = CurrentDim(2) + 0.001
Wend
While CurrentDim(3) <= MinMax(6)
Sheets("hss_parts_thk").Range("A65536").End(xlUp).Offset(1, 0) = PNStr
Sheets("hss_parts_thk").Range("B65536").End(xlUp).Offset(1, 0) = CurrentDim(3)
CurrentDim(3) = CurrentDim(3) + 0.001
Wend
While CurrentDim(4) <= MinMax(7)
Sheets("hss_parts_conc").Range("A65536").End(xlUp).Offset(1, 0) = PNStr
Sheets("hss_parts_conc").Range("B65536").End(xlUp).Offset(1, 0) = CurrentDim(4)
CurrentDim(4) = CurrentDim(4) + 0.001
Wend
Next Cell
End Sub
这是我第一次尝试在 VBA 中编码,所以如果我在这里犯了一个基本错误,我提前道歉。
这是用于生成维度列表的 excel 文件。宏已在此副本上运行,并且由它生成的数据位于 hss_part_XXXX 选项卡上。您可以在 hss_parts_conc 选项卡上看到错误行为,其中 PW002 和 PW104 的最后一个数字:Excel 文件
解决方案
这是由于浮点不精确造成的:0.001 不能精确地存储在浮点表示中,因此通过一遍又一遍地添加它,求和值的误差会增加。
您可以使用Currency
数据类型而不是Double
,这对于您在小数部分中使用最多四位数字时准确无误,这对于您的情况似乎没问题。
推荐阅读
- php - 如何限制至少 5 个文件可以上传并在格式错误时收到错误消息?
- kotlin - 没有通用类型的 JsonAdapter(在通用函数内部)
- c# - 实验和unity3D(协程、定时器和具体条件)
- java - 处理 tcp java socket 项目中的异常
- c# - 如何有一个带有项目的 UserControl 和一个我想通过 XAML 代码中的属性插入另一个 UserControl 的 contentControl?
- spring - 无法注册在类路径资源 [com/example/config/JobConfig.class] 中定义的 bean 'step1'
- jquery - 空冰有什么问题,它不能工作
- reactjs - Enzyme & React 路由器:如何使用 useHistory 对组件进行浅层渲染
- hadoop - Windows 10 Hyper-v 上的 HDP 2.6.5
- angular - 在 Angular 中以父/子关系实现添加/更新/删除操作的最佳方法是什么?