我目前正在使用VBA,这是我不习惯的。我正在制作一个脚本,该脚本从txt文件读取一些数据,然后从中制作一个图形。该脚本读取txt文件,收集数据并将其输入到excel工作簿中。然后制作这些值的图表。 一个值应该乘以十倍。但是,当读取值并将其转换为双精度值时,我偶然发现了很多问题。
这是文件的外观。第二列是您感兴趣的地方。
444.267 70.26 332.562 0.692 2 1 0 157.48
444.933 70.26 342.562 0.692 2 1 0 157.48
446.533 72.88 342.562 0.692 2 1 0 157.48
462.933 75.5 342.562 0.692 2 1 0 157.48
468.667 75.5 331.75 0.692 2 1 0 157.48
479.333 75.5 331.75 0.692 2 12 0 157.48
479.733 75.5 331.75 0.692 2 11 0 157.48
480.133 75.5 331.75 0.692 2 1 0 157.48
539.467 75.5 331.75 0.692 2 12 0 157.48
下面,我附加了一些代码。我出于调试目的对其进行了一些更改。
For tmp1 = 1 To 70
'While Not EOF(FileNum)
Dim DataLine_Array() As String
Line Input #FileNum, DataLine
DataLine_Array = Split(DataLine, vbTab)
Cells(i, 1) = DataLine_Array(0)
Cells(i, 2) = DataLine_Array(1)
Cells(i, 3) = DataLine_Array(2)
Cells(i, 4) = DataLine_Array(3)
Cells(i, 5) = DataLine_Array(4)
Cells(i, 6) = DataLine_Array(5)
Cells(i, 7) = DataLine_Array(6)
Cells(i, 8) = DataLine_Array(7)
On Error GoTo ErrLabel:
Dim Tmp_Double As Double
Tmp_Double = DataLine_Array(3)
Cells(i, 10) = (Tmp_Double)
'Here it goes wrong
Cells(i, 9) = DataLine_Array(1) / 10
Dim Test_test As String
Dim test_test2 As Double
Test_test = DataLine_Array(1) / 10
test_test2 = DataLine_Array(1)
'Output
Debug.Print 'start'
Debug.Print DataLine_Array(1)
Debug.Print Test_test
Debug.Print VarType(Test_test)
Debug.Print test_test2
Debug.Print VarType(test_test2)
ErrLabel:
Resume Next
i = i + 1
Next tmp1
这就是输出。
70.26
702,6
8
7026
5
72.88
728,8
8
7288
5
75.5
75,5
8
755
5
75.5
75,5
8
755
5
如您所见,仅打印行时输出正确。 但是,当将其存储为字符串时,点数将变为逗号,并根据存在的小数位数切换位置。我在使用逗号代替小数点分隔符的欧洲国家/地区。但这不应该影响我的头脑。 尝试将值存储为双精度时,小数点会完全消失。
目标是按原样读取文件的第二列,并将其乘以十。只要我不以一致的方式读取值,这很难。
谢谢!
答案 0 :(得分:0)
Mange_Man
我的建议是首先获取文件数据并将其放入Excel工作表中。如果VBA在Excel中不起作用,那么它也将不适用于文件I / O。
尝试将数组粘贴到excel中并运行下面的宏。
如果您的“ I”列的值未乘以10,那么我想这是您的Excel(欧洲)区域设置存在问题。
否则,它可能与您的计算机本身以及它与Excel和欧洲区域设置与文件I / O的交互方式有关。无论如何,首先要在excel中尝试一下。
Option Explicit
Sub Test()
Dim i As Integer
Dim n As Integer
Dim arr() As Double
Range("A1:A9").Select 'Select your nine rows
'Set delimiter if necessary
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True
i = 8
ReDim arr(i)
For n = 0 To i
arr(n) = Range("B" & n + 1).value * 10 'Multiply values by 10
Next n
For n = 0 To i
Range("I" & n + 1).value = arr(n) 'Set values in Column "I"
Next n
End Sub