我是新的excel vba脚本。我需要的是获得LZFmax数据。
测量结果Excel VBA:通过选定列范围从txt文件读取特定行
Band [Hz] 6.3 8.0 10.0 12.5 16.0 20.0 25.0 31.5 40.0 50.0 63.0 80.0 100.0 125.0 160.0 200.0 250.0 315.0 400.0 500.0 630.0 800.0 1000.0 1250.0 1600.0 2000.0 2500.0 3150.0 4000.0 5000.0 6300.0 8000.0 10000.0 12500.0 16000.0 20000.0
[dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB] [dB]
LZFmax 88.5 81.9 72.8 71.5 70.3 71.0 75.0 69.9 76.5 86.9 93.4 97.9 93.4 86.7 88.8 99.4 98.0 100.8 103.4 97.6 101.4 96.5 93.3 90.2 88.5 91.2 85.2 86.7 80.9 78.4 79.8 80.3 75.8 68.9 66.9 63.9
LZFmin 20.0 21.4 22.8 20.1 24.6 24.6 28.7 30.5 32.8 35.0 29.0 35.6 34.5 38.0 39.4 39.0 42.5 40.1 41.9 41.7 43.0 39.2 38.5 37.5 36.7 35.4 34.7 34.8 34.6 34.2 34.7 35.7 36.6 37.5 38.9 40.9
LZeq 61.8 56.8 46.8 46.7 49.1 55.5 49.4 47.5 56.2 69.0 75.3 79.4 75.2 70.7 72.7 76.7 78.8 79.0 79.2 78.6 81.3 78.5 75.2 70.5 70.9 70.0 67.2 68.2 63.6 62.7 57.5 57.4 53.7 51.8 47.8 53.9
我已经有一个代码:
Public koef_k As Double
Private Sub Open_Click()
Dim myFile As Variant, koef_k As Integer
myFile = Application.GetOpenFilename("Text Files (*.txt),*.txt", , _
"Select file")
If myFile = False Then Exit Sub
Open myFile For Input As #1
row_number = 0
Do Until EOF(1)
Line Input #1, LineFromFile
LineItems = Split(LineFromFile, vbTab)
Range("C9").Offset(row_number, 0).Value = LineItems(1)
row_number = row_number + 1
Loop
Close #1
End Sub
它像这个工程的数据格式:
Band[Hz] LZFmax
50 51
63 58
80 60
100 61
125 63
160 65
200 66
250 69
315 73
400 67
500 65
630 62
800 60
1000 58
1250 55
1600 51
2000 48
2500 42
3150 39
4000 36
5000 32
如何修改这个代码,它将读取只有LZFmax线,并通过从50到5000Hz的频带[Hz]列?
目前,我发现了部分解决方案
Private Sub Open_Click()
Dim fn As Variant, myLine As Long, txt As String, i As Integer, x
fn = Application.GetOpenFilename("Text Files (*.txt),*.txt", , _
"Open File")
If fn = False Then Exit Sub
myLine = 111 '<- change to suite
txt = CreateObject("Scripting.FileSystemObject").OpenTextFile(fn).ReadAll
x = Split(txt, vbTab)
'MsgBox x(myLine + 1)
row_number = 0
Range("C9").Offset(row_number, 0).Value = x(myLine - 10)
i = 10
Do While i < 31
Cells(i, "C").Value = x(myLine)
i = i + 1
myLine = myLine + 1
Loop
Close #1
End Sub
此代码的工作,因为我想,只有MYLINE值不是很方便,因为我不得不手动找到它。 也许有更好的方法来优化此代码?
非常感谢您的帮助。有一个代码部分对我来说不完全清楚。 (x(i),4)=“Band” y = x(i) ElseIf Left(x(i) ),6)= “LZFmax” 那么 Z = X(I) 退出对于 结束If' 在分裂所以vbLine选项,分割整个文件分成行和 号4和6是用于检查是否波段和LZF是在这些线? – user3434943
是'vbNewLine'将txt文件分割为9行,数组'x'现在包含9个元素。现在即时通过每一行,并切割前4(6)字母,看看他们是否“乐队”或“LZFmax”。但就像你说的那样。如果您有任何其他问题,请询问:) – UGP