VBA批量读取txt文档目标数据并分组处理

VBA在批量处理txt等文本文件的数据是其数据处理的一大重要应用,实际在处理txt文档往往需要提取多个测试料的多个目标数值,而且还要将提取的数值进一步处理,如求取平均值,最小值等,能够直观地看到一组数据的规律;将超出规格的数据进行标识,可以直观看到某些数据异常区域。

下述的实例就是需要提取txt文档中一颗料多个目标值,并利用一维数组的方式写入到单元格中,进而求取每一组值的平均值和最小值,然后循环提取进行每一个测试料的数据,最后将每一颗料的多组数据进行汇总成群数据,得到一个简洁的数据表,能偶较为直观知道所有数据群里面的每组平均值,最小值,组间比值以及超出规格的数量及比例,即一个txt文档的所有数据汇总成一行数据,简洁高效,可读性强。

以下是具体的实现方法。

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'这部分代码是读取txt文档多个目标数据并用数组写入单元格
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Sub Data_SFR()Dim Bookfile As String, shOCHFA10 As Object, sh_Start As Object    '定义变量名称Application.ScreenUpdating = False   '禁止屏幕刷新Application.Calculation = xlCalculationManual   '计算模式为手动Bookfile = ThisWorkbook.NameSet shOCHFA10 = Workbooks(Bookfile).Sheets("OCHFA10")		'定义worksheetSet sh_Start = Workbooks(Bookfile).Sheets("Start")		'定义worksheetshOCHFA10.ActivateOr_i_30mm = 0Do While shOCHFA10.Cells(Or_i_30mm + 4, 3) <> ""     '循环判断第3列的空白行是否为空,非空行数为Or_i_30mmOr_i_30mm = Or_i_30mm + 1LoopDim fso As Object, sFile As Object, blnExist As Boolean     '定义对象变量    Dim FileName As String, LineText As Variant, i As Integer, iCol As IntegerConst ForReading = 1   '指定常量Set fso = CreateObject("Scripting.FileSystemObject")    '创建FileSystemObject对象ChDrive "D"ChDir "D:\OCHFA10\OCHFA10 SLT Data"Openfilename = Application.GetOpenFilename("raw files (*.txt), *.txt")   '打开类型为txt的文件,即筛选打开文件类型sh_Start.Cells(5, 3) = Openfilename     '写入读取的文件名称  sh_Start.Cells(9, 3) = Now()            '写入当前的开文件时间blnExist = fso.FileExists(Openfilename) '判断文件是否存在,如果不存在,则退出过程If Not blnExist Then MsgBox "文件不存在!": Exit SubSet sFile = fso.OpenTextFile(Openfilename, ForReading) '创建并打开名为sFile的TextStream对象Text = Split(Openfilename, "\")       '拆分字符串lot_i = UBound(Text)sh_Start.Cells(7, 3) = Text(UBound(Text) - 2)A_start_30mm = Or_i_30mm + 4    '标题行占用4行,变量要加上4kj_30mm = 1i = 0j = 0Light_i = 0Do While Not sFile.AtEndOfStream    '如果不是文本文件的尾端,则读取数据LineText = sFile.ReadLine       '逐行读取字符串SFR_Text = Split(LineText, " ")    '逐行拆分字符串SFR_No = UBound(SFR_Text)         '获取读取的字符串最后序号的拆分字符串End_Text = Split(LineText, ".")   '逐行拆分字符串END_No = UBound(SFR_Text)If END_No > 0 ThenLineText_Array = Right(SFR_Text(1), 17)   'right函数截取SFR_Text(1)字符串ElseEnd IfLineText_Start = Right(Left(LineText, 31), 9)	'right函数和left函数组合截取LineText特定字符串,与目标字符串对比Chart_30mm = Right(LineText, 19)           'right函数截取LineText特定字符串,与目标字符串对比MTFValue_Check = Right(LineText_TVL, 9)	  'right函数截取LineText特定字符串,与目标字符串对比If SFR_No > 2 ThenSFR_Coor = SFR_Text(SFR_No - 2)O_C = SFR_Text(SFR_No - 2)
'            LightMode = SFR_Text(SFR_No - 3)OTP_Text = SFR_Text(SFR_No - 1)             '以各种条件拆分整行字符串,取特定字符串LineText_TVL = SFR_Text(SFR_No - 1)LineText_Light = SFR_Text(SFR_No - 3)ElseEnd IfIf LineText_TVL = "(210)" Then     '定向标识,当读取内容行的字节无法区别,则采用跨行识别Light_i = 1End IfIf LineText_TVL = "(70)" Then      '定向标识Light_j = 1End IfDim Arr_30mm(0 To 52)Dim Arr_Light(1 To 4)If Light_j = 1 And OTP_Text = "OTPCode" Then   ''定向标识的应用shOCHFA10.Cells(A_start_30mm, 5) = SFR_Text(SFR_No)ElseEnd IfIf O_C = sh_Start.Cells(1, 3) Then   Arr_30mm(0) = SFR_Text(SFR_No)		'将目标字符串所在行的截取字符串写入一维数组第一个值ElseEnd IfFor LightMode_i = 0 To 3If Light_i = 1 And LineText_Light = sh_Start.Cells(2, LightMode_i + 2) Then    '定向标识应用&判断提取字符串与目标字符串是否相同Arr_Light(1 + LightMode_i) = SFR_Text(SFR_No)		'将目标字符串所在行的指定字符串写入一维动态数组ElseEnd IfNext LightMode_iFor TVL_i = 1 To 52If LineText_TVL = sh_Start.Cells(1, TVL_i + 3) Then		'判断截取字符串是否与目标字符串相同Arr_30mm(TVL_i) = SFR_Text(SFR_No)		''将目标字符串所在行的指定字符串写入一维动态数组ElseEnd IfNext TVL_i'        If SFR_Coor = "Enable" And SFR_No > 7 Then
'
'            Arr_Coor(Coor_i) = SFR_Text(SFR_No - 6) & "/" & SFR_Text(SFR_No - 5) & "/" & SFR_Text(SFR_No - 4) & "/" & SFR_Text(SFR_No - 3)
'            Coor_i = Coor_i + 1
'
'            Else
'
'        End IfIf LineText_Array = "SFRMxNWithThd_Raw" Then     'i_Spec = i_Spec + 1If i_Spec Mod 4 = 2 Then   '判断"SFRMxNWithThd_Raw"字符串出现的2N的奇偶行,若为2N奇数行shOCHFA10.Cells(A_start_30mm, 3) = sh_Start.Cells(7, 3)shOCHFA10.Cells(A_start_30mm, 4) = kj_30mm
'               shOCHTA10.Cells(A_start_30mm, 6) = SFR_Text(SFR_No)
'               shOCHTA10.Cells(A_start_30mm, 2) = Right(Left(LineText, 20), 19)Range(shOCHFA10.Cells(A_start_30mm, 11), shOCHFA10.Cells(A_start_30mm, 63)) = Arr_30mm   '数组的值写入单元格Range(shOCHFA10.Cells(A_start_30mm, 7), shOCHFA10.Cells(A_start_30mm, 10)) = Arr_Light   '数组的值写入单元格ElseIf i_Spec Mod 4 = 0 Then	'判断"SFRMxNWithThd_Raw"字符串出现的2N的奇偶行,若为2N偶数行Range(shOCHFA10.Cells(A_start_30mm, 85), shOCHFA10.Cells(A_start_30mm, 137)) = Arr_30mmLight_i = 0Light_j = 0kj_30mm = kj_30mm + 1A_start_30mm = A_start_30mm + 1Erase Arr_30mm()	'清除一维数组的数据,若将动态一维数组改为二维动态数组Arr_30mm(A_start_30mm,TVL_i),这一行代码可以去掉Erase Arr_Light()	''清除一维数组的数据,若将动态一维数组改为二维动态数组Arr_Light(,A_start_30mm,1 + LightMode_i),这一行代码可以去掉ElseEnd IfEnd If'        If LineText_Start = "Final Bin" Then''            shOCHTA10.Cells(A_start_30mm, 3) = sh_Start.Cells(7, 3)
''            shOCHTA10.Cells(A_start_30mm, 4) = kj_30mm
'            shOCHFA10.Cells(A_start_30mm - 1, 6) = SFR_Text(SFR_No)
'
'            shOCHFA10.Cells(A_start_30mm - 1, 2) = Right(Left(LineText, 20), 19)
''
'        Else
''
'        End IfIf SFR_No > 9 ThenIf Right(End_Text(0), 21) = "End of SLT II testing" Then	'判断局部字符串的终点shOCHFA10.Cells(A_start_30mm - 1, 6) = SFR_Text(9)		'行数A_start_30mm - 1是因为上述循环+1行shOCHFA10.Cells(A_start_30mm - 1, 2) = Right(Left(LineText, 20), 19)ElseEnd IfEnd IfLoopsFile.Close 	'关闭名为sFile的TextStream对象Set fso = Nothing	'对象变量关闭后,需要将对象变量设置为空Set sFile = Nothing		'对象变量关闭后,需要将对象变量设置为空Call Min_Avg		'调用Min_Avg子程序shOCHFA10.Cells(A_start_30mm, 1).SelectApplication.Calculation = xlCalculationAutomatic		'计算模式为自动,与开始设为手动成对存在,加快代码运行速度	Application.ScreenUpdating = True		'禁止屏幕刷新,与开始禁止刷屏成对存在,加快代码运行速度End Sub''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'这部分代码是求取多组数据的平均值和最小值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Sub Min_Avg()Bookfile = ThisWorkbook.NameSet shOCHFA10 = Workbooks(Bookfile).Sheets("OCHFA10")Set sh_Start = Workbooks(Bookfile).Sheets("Start")shOCHFA10.Activatei = 0Run_done = 0Run_No = 0Do While shOCHFA10.Cells(i + 4, 3) <> ""i = i + 1LoopDo While shOCHFA10.Cells(Run_done + 4, 64) <> ""Run_done = Run_done + 1LoopRun_No = i - Run_done		'确定已经读取到目标数据但是未求平均值和最小值的行数Sum_x = 0Sum_y = 0Min_x = 1Min_y = 1Field_i = 0Field_j = 0For j = 0 To Run_No - 1For p = 0 To 6For q = 0 To 51If shOCHFA10.Cells(1, q + 12) = shOCHFA10.Cells(1, p + 64) Then		'判断是都是目标字符串Field_i = Field_i + 1Sum_x = Sum_x + shOCHFA10.Cells(Run_done + j + 4, q + 12)		'求和If shOCHFA10.Cells(Run_done + j + 4, q + 12) < Min_x Then	'迭代的方式求最小值Min_x = shOCHFA10.Cells(Run_done + j + 4, q + 12)ElseEnd IfEnd IfIf shOCHFA10.Cells(1, q + 86) = shOCHFA10.Cells(1, p + 138) Then	'判断是都是目标字符串Field_j = Field_j + 1Sum_y = Sum_y + shOCHFA10.Cells(Run_done + j + 4, q + 86)		'求和If shOCHFA10.Cells(Run_done + j + 4, q + 86) < Min_y Then	'迭代的方式求最小值Min_y = shOCHFA10.Cells(Run_done + j + 4, q + 86)ElseEnd IfEnd IfNext qIf Field_i <> 0 ThenshOCHFA10.Cells(Run_done + j + 4, p + 64) = Min_x		'最小值写入单元格shOCHFA10.Cells(Run_done + j + 4, p + 64 + 7) = Sum_x / Field_i		'求第一组数据的每项平均值End IfIf Field_j <> 0 ThenshOCHFA10.Cells(Run_done + j + 4, p + 138) = Min_y		'最小值写入单元格shOCHFA10.Cells(Run_done + j + 4, p + 138 + 7) = Sum_y / Field_j		'求第二组数据的每项平均值ElseEnd IfSum_x = 0		'重置变量Sum_y = 0Field_i = 0Field_j = 0Min_x = 1Min_y = 1If shOCHFA10.Cells(Run_done + j + 4, 71 + p) <> 0 ThenshOCHFA10.Cells(Run_done + j + 4, 71 + p + 7) = shOCHFA10.Cells(Run_done + j + 4, 64 + p) / shOCHFA10.Cells(Run_done + j + 4, 71 + p)		'求同类两组值的比值ElseshOCHFA10.Cells(Run_done + j + 4, 71 + p + 7) = ""End IfIf shOCHFA10.Cells(Run_done + j + 4, 145 + p) <> 0 ThenshOCHFA10.Cells(Run_done + j + 4, 145 + p + 7) = shOCHFA10.Cells(Run_done + j + 4, 138 + p) / shOCHFA10.Cells(Run_done + j + 4, 145 + p)	'求同类两组值的比值ElseshOCHFA10.Cells(Run_done + j + 4, 145 + p + 7) = ""End IfNext p
'            If shOCHTA10.Cells(Run_done + j + 4, 49) <> 0 Then
'                shOCHTA10.Cells(Run_done + j + 4, 53) = shOCHTA10.Cells(Run_done + j + 4, 45) / shOCHTA10.Cells(Run_done + j + 4, 49)
'                Else
'                shOCHTA10.Cells(Run_done + j + 4, 53) = ""
'
'            End If
'
'            If shOCHTA10.Cells(Run_done + j + 4, 50) <> 0 Then
'                shOCHTA10.Cells(Run_done + j + 4, 54) = shOCHTA10.Cells(Run_done + j + 4, 46) / shOCHTA10.Cells(Run_done + j + 4, 50)
'                Else
'                shOCHTA10.Cells(Run_done + j + 4, 54) = ""
'            End If
''            If shOCHTA10.Cells(Run_done + j + 4, 109) <> 0 Then
'                shOCHTA10.Cells(Run_done + j + 4, 113) = shOCHTA10.Cells(Run_done + j + 4, 108) / shOCHTA10.Cells(Run_done + j + 4, 109)
'                Else
'                shOCHTA10.Cells(Run_done + j + 4, 113) = ""
'            End If
'
'            If shOCHTA10.Cells(Run_done + j + 4, 105) <> 0 Then
'                shOCHTA10.Cells(Run_done + j + 4, 114) = shOCHTA10.Cells(Run_done + j + 4, 109) / shOCHTA10.Cells(Run_done + j + 4, 105)
'                shOCHTA10.Cells(Run_done + j + 4, 115) = shOCHTA10.Cells(Run_done + j + 4, 106) / shOCHTA10.Cells(Run_done + j + 4, 105)
'                Else
'                shOCHTA10.Cells(Run_done + j + 4, 114) = ""
'                shOCHTA10.Cells(Run_done + j + 4, 115) = ""
'
'            End If
'
'            If shOCHTA10.Cells(Run_done + j + 4, 106) <> 0 Then
'                shOCHTA10.Cells(Run_done + j + 4, 116) = shOCHTA10.Cells(Run_done + j + 4, 109) / shOCHTA10.Cells(Run_done + j + 4, 106)
'                Else
'                shOCHTA10.Cells(Run_done + j + 4, 116) = ""
'            End IfNext j'-------------------------------------------------------------------- To get 0.58F Min SFR and Avg SFR --------------------------------------------------------------------'    Field58_Min = 1
'    Field58_Med = 1
'
'    For m = 0 To Run_No - 1
'        For n = 0 To 2
'
'            If shOCHTA10.Cells(Run_done + m + 4, n + 46) < Field58_Min Then
'                Field58_Min = shOCHTA10.Cells(Run_done + m + 4, n + 46)
'                Else
'            End If
'
'            If shOCHTA10.Cells(Run_done + m + 4, n + 101) < Field58_Med Then
'                Field58_Med = shOCHTA10.Cells(Run_done + m + 4, n + 101)
'                Else
'            End If
'
'        Next n
'
'        shOCHTA10.Cells(Run_done + m + 4, 45) = Field58_Min
'        shOCHTA10.Cells(Run_done + m + 4, 52) = (shOCHTA10.Cells(Run_done + m + 4, 53) * 8 + shOCHTA10.Cells(Run_done + m + 4, 54) * 4 + shOCHTA10.Cells(Run_done + m + 4, 55) * 8) / 20   '?????
'        shOCHTA10.Cells(Run_done + m + 4, 100) = Field58_Med
'        shOCHTA10.Cells(Run_done + m + 4, 107) = (shOCHTA10.Cells(Run_done + m + 4, 108) * 8 + shOCHTA10.Cells(Run_done + m + 4, 109) * 4 + shOCHTA10.Cells(Run_done + m + 4, 110) * 8) / 20   '?????
'
'        Field58_Min = 1
'        Field58_Med = 1
'
'    Next m'-------------------------------------------------------------------- To Change Color for Fail items --------------------------------------------------------------------For m = 0 To Run_No - 1For n = 0 To 65If shOCHFA10.Cells(Run_done + m + 4, n + 12) < shOCHFA10.Cells(3, n + 12) Then		'判断获取的目标值是否小于规格,小于规则则标红,字体加粗,斜体shOCHFA10.Cells(Run_done + m + 4, n + 12).Font.ColorIndex = 3shOCHFA10.Cells(Run_done + m + 4, n + 12).Font.Bold = TrueshOCHFA10.Cells(Run_done + m + 4, n + 12).Font.Italic = TrueEnd IfIf shOCHFA10.Cells(Run_done + m + 4, n + 86) < shOCHFA10.Cells(3, n + 86) ThenshOCHFA10.Cells(Run_done + m + 4, n + 86).Font.ColorIndex = 3shOCHFA10.Cells(Run_done + m + 4, n + 86).Font.Bold = TrueshOCHFA10.Cells(Run_done + m + 4, n + 86).Font.Italic = TrueEnd IfNext nNext m'-------------------------------------------------------------------- To delete repeated rows and empty rows --------------------------------------------------------------------For m = 0 To Run_No - 1'        If shOCHFA10.Cells(Run_done + m + 4, 5) <> "" And shOCHFA10.Cells(Run_done + m + 4, 12) = "" ThenIf shOCHFA10.Cells(Run_done + m + 4, 6) <> 0 And Application.CountIf(shOCHFA10.Columns("E"), shOCHFA10.Cells(Run_done + m + 4, 5)) > 1 or shOCHFA10.Cells(Run_done + m + 4, 6) <> 0 And shOCHFA10.Cells(Run_done + m + 4, 12) = "" ThenRows(Run_done + m + 4).Deletem = m - 1ElseEnd IfNext m
'   End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'这部分代码是汇总数据,按照同一群数据进行求和,分类,取平均值,算两群数据比值
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub MTSummary()Bookfile = ThisWorkbook.NameSet shData = Workbooks(Bookfile).Sheets("MT Summary")Dim arrDim dataArrstartRow = shData.Range("Y100000").End(xlUp).Row + 1endRow = shData.Range("D100000").End(xlUp).RowSet shOpenSummary = ThisWorkbook.Sheets("OCHFA10")On Error Resume NextshOpenSummary.ShowAllDatadataLastRow = shOpenSummary.Range("C1000000").End(xlUp).RowdataArr = shOpenSummary.Range("C5:FB" & dataLastRow)For i = startRow To endRowlotID = shData.Cells(i, 4).ValueCenterShift = 0RatioDiagTL = 0RatioDiagTR = 0RatioDiagBL = 0RatioDiagBR = 0OD5mm01FMin = 0OD5mm028FMin = 0OD5mm036FMin = 0OD5mm041FMin = 0OD5mm048FMin = 0OD5mm061FMin = 0OD5mm072FMin = 0OD5mm01FAvg = 0OD5mm028FAvg = 0OD5mm036FAvg = 0OD5mm041FAvg = 0OD5mm048FAvg = 0OD5mm061FAvg = 0OD5mm072FAvg = 0OD5mm01FRatio = 0OD5mm028FRatio = 0OD5mm036FRatio = 0OD5mm041FRatio = 0OD5mm048FRatio = 0OD5mm061FRatio = 0OD5mm072FRatio = 0OD50mm01FMin = 0OD50mm028FMin = 0OD50mm036FMin = 0OD50mm041FMin = 0OD50mm048FMin = 0OD50mm061FMin = 0OD50mm072FMin = 0OD50mm01FAvg = 0OD50mm028FAvg = 0OD50mm036FAvg = 0OD50mm041FAvg = 0OD50mm048FAvg = 0OD50mm061FAvg = 0OD50mm072FAvg = 0OD50mm01FRatio = 0OD50mm028FRatio = 0OD50mm036FRatio = 0OD50mm041FRatio = 0OD50mm048FRatio = 0OD50mm061FRatio = 0OD50mm072FRatio = 0Bin_0 = 0Bin_325 = 0Bin_202_203 = 0Bin_385 = 0Bin_315 = 0Bin_365 = 0Bin_other = 0unitCount = 0For j = 1 To dataLastRow - 4If dataArr(j, 1) = lotID And dataArr(j, 10) <> "" Then'lastDate = dataArr(j, 1)RatioDiagTL = RatioDiagTL + dataArr(j, 5)RatioDiagTR = RatioDiagTR + dataArr(j, 6)RatioDiagBL = RatioDiagBL + dataArr(j, 7)RatioDiagBR = RatioDiagBR + dataArr(j, 8)CenterShift = CenterShift + dataArr(j, 9)OD5mm01FMin = OD5mm01FMin + dataArr(j, 136)OD5mm028FMin = OD5mm028FMin + dataArr(j, 137)OD5mm036FMin = OD5mm036FMin + dataArr(j, 138)OD5mm041FMin = OD5mm041FMin + dataArr(j, 139)OD5mm048FMin = OD5mm048FMin + dataArr(j, 140)OD5mm061FMin = OD5mm061FMin + dataArr(j, 141)OD5mm072FMin = OD5mm072FMin + dataArr(j, 142)OD5mm01FAvg = OD5mm01FAvg + dataArr(j, 143)OD5mm028FAvg = OD5mm028FAvg + dataArr(j, 144)OD5mm036FAvg = OD5mm036FAvg + dataArr(j, 145)OD5mm041FAvg = OD5mm041FAvg + dataArr(j, 146)OD5mm048FAvg = OD5mm048FAvg + dataArr(j, 147)OD5mm061FAvg = OD5mm061FAvg + dataArr(j, 148)OD5mm072FAvg = OD5mm072FAvg + dataArr(j, 149)OD5mm01FRatio = OD5mm01FRatio + dataArr(j, 150)OD5mm028FRatio = OD5mm028FRatio + dataArr(j, 151)OD5mm036FRatio = OD5mm036FRatio + dataArr(j, 152)OD5mm041FRatio = OD5mm041FRatio + dataArr(j, 153)OD5mm048FRatio = OD5mm048FRatio + dataArr(j, 154)OD5mm061FRatio = OD5mm061FRatio + dataArr(j, 155)OD5mm072FRatio = OD5mm072FRatio + dataArr(j, 156)OD50mm01FMin = OD50mm01FMin + dataArr(j, 62)OD50mm028FMin = OD50mm028FMin + dataArr(j, 63)OD50mm036FMin = OD50mm036FMin + dataArr(j, 64)OD50mm041FMin = OD50mm041FMin + dataArr(j, 65)OD50mm048FMin = OD50mm048FMin + dataArr(j, 66)OD50mm061FMin = OD50mm061FMin + dataArr(j, 67)OD50mm072FMin = OD50mm072FMin + dataArr(j, 68)OD50mm01FAvg = OD50mm01FAvg + dataArr(j, 69)OD50mm028FAvg = OD50mm028FAvg + dataArr(j, 70)OD50mm036FAvg = OD50mm036FAvg + dataArr(j, 71)OD50mm041FAvg = OD50mm041FAvg + dataArr(j, 72)OD50mm048FAvg = OD50mm048FAvg + dataArr(j, 73)OD50mm061FAvg = OD50mm061FAvg + dataArr(j, 74)OD50mm072FAvg = OD50mm072FAvg + dataArr(j, 75)OD50mm01FRatio = OD50mm01FRatio + dataArr(j, 76)OD50mm028FRatio = OD50mm028FRatio + dataArr(j, 77)OD50mm036FRatio = OD50mm036FRatio + dataArr(j, 78)OD50mm041FRatio = OD50mm041FRatio + dataArr(j, 79)OD50mm048FRatio = OD50mm048FRatio + dataArr(j, 80)OD50mm061FRatio = OD50mm061FRatio + dataArr(j, 81)OD50mm072FRatio = OD50mm072FRatio + dataArr(j, 82)unitCount = unitCount + 1If dataArr(j, 4) = 0 ThenBin_0 = Bin_0 + 1ElseIf dataArr(j, 4) = 325 ThenBin_325 = Bin_325 + 1ElseIf dataArr(j, 4) = 202 Or dataArr(j, 4) = 203 ThenBin_202_203 = Bin_202_203 + 1ElseIf dataArr(j, 4) = 385 ThenBin_385 = Bin_385 + 1ElseIf dataArr(j, 4) = 315 ThenBin_315 = Bin_315 + 1ElseIf dataArr(j, 4) = 365 ThenBin_365 = Bin_365 + 1ElseBin_other = Bin_other + 1End IfEnd IfNextshData.Cells(i, "V").Value = CenterShift / unitCountshData.Cells(i, "W").Value = RatioDiagTL / unitCountshData.Cells(i, "X").Value = RatioDiagTR / unitCountshData.Cells(i, "Y").Value = RatioDiagBL / unitCountshData.Cells(i, "Z").Value = RatioDiagBR / unitCountshData.Cells(i, "AA").Value = OD5mm01FMin / unitCountshData.Cells(i, "AB").Value = OD5mm028FMin / unitCountshData.Cells(i, "AC").Value = OD5mm036FMin / unitCountshData.Cells(i, "AD").Value = OD5mm041FMin / unitCountshData.Cells(i, "AE").Value = OD5mm048FMin / unitCountshData.Cells(i, "AF").Value = OD5mm061FMin / unitCountshData.Cells(i, "AG").Value = OD5mm072FMin / unitCountshData.Cells(i, "AH").Value = OD5mm01FAvg / unitCountshData.Cells(i, "AI").Value = OD5mm028FAvg / unitCountshData.Cells(i, "AJ").Value = OD5mm036FAvg / unitCountshData.Cells(i, "AK").Value = OD5mm041FAvg / unitCountshData.Cells(i, "AL").Value = OD5mm048FAvg / unitCountshData.Cells(i, "AM").Value = OD5mm061FAvg / unitCountshData.Cells(i, "AN").Value = OD5mm072FAvg / unitCountshData.Cells(i, "AO").Value = OD5mm01FRatio / unitCountshData.Cells(i, "AP").Value = OD5mm028FRatio / unitCountshData.Cells(i, "AQ").Value = OD5mm036FRatio / unitCountshData.Cells(i, "AR").Value = OD5mm041FRatio / unitCountshData.Cells(i, "AS").Value = OD5mm048FRatio / unitCountshData.Cells(i, "AT").Value = OD5mm061FRatio / unitCountshData.Cells(i, "AU").Value = OD5mm072FRatio / unitCountshData.Cells(i, "AV").Value = OD50mm01FMin / unitCountshData.Cells(i, "AW").Value = OD50mm028FMin / unitCountshData.Cells(i, "AX").Value = OD50mm036FMin / unitCountshData.Cells(i, "AY").Value = OD50mm041FMin / unitCountshData.Cells(i, "AZ").Value = OD50mm048FMin / unitCountshData.Cells(i, "BA").Value = OD50mm061FMin / unitCountshData.Cells(i, "BB").Value = OD50mm072FMin / unitCountshData.Cells(i, "BC").Value = OD50mm01FAvg / unitCountshData.Cells(i, "BD").Value = OD50mm028FAvg / unitCountshData.Cells(i, "BE").Value = OD50mm036FAvg / unitCountshData.Cells(i, "BF").Value = OD50mm041FAvg / unitCountshData.Cells(i, "BG").Value = OD50mm048FAvg / unitCountshData.Cells(i, "BH").Value = OD50mm061FAvg / unitCountshData.Cells(i, "BI").Value = OD50mm072FAvg / unitCountshData.Cells(i, "BJ").Value = OD50mm01FRatio / unitCountshData.Cells(i, "BK").Value = OD50mm028FRatio / unitCountshData.Cells(i, "BL").Value = OD50mm036FRatio / unitCountshData.Cells(i, "BM").Value = OD50mm041FRatio / unitCountshData.Cells(i, "BN").Value = OD50mm048FRatio / unitCountshData.Cells(i, "BO").Value = OD50mm061FRatio / unitCountshData.Cells(i, "BP").Value = OD50mm072FRatio / unitCountshData.Cells(i, "A").Value = "ATE"shData.Cells(i, "B").Value = "OCHFA10"shData.Cells(i, "C").Value = Format(Now, "yyyy/mm/dd")shData.Cells(i, "E").Value = unitCountshData.Cells(i, "O").Value = Bin_0shData.Cells(i, "P").Value = Bin_325shData.Cells(i, "Q").Value = Bin_202_203shData.Cells(i, "R").Value = Bin_385shData.Cells(i, "S").Value = Bin_315shData.Cells(i, "T").Value = Bin_365shData.Cells(i, "U").Value = Bin_other'        If shData.Cells(i, "AG").Value < shData.Cells(3, "AG").Value Then
'            shData.Range("AG" & i).Font.Color = vbRed
'            shData.Range("AG" & i).Font.Bold = True
'        Else:
'            shData.Range("AG" & i).Font.Color = vbBlack
'            shData.Range("AG" & i).Font.Bold = False
'        End If
'        If shData.Cells(i, "O").Value < 0.24 Then
'            shData.Range("O" & i).Font.Color = vbRed
'            shData.Range("O" & i).Font.Bold = True
'        Else:
'            shData.Range("O" & i).Font.Color = vbBlack
'            shData.Range("O" & i).Font.Bold = False
'        End If
'        If shData.Cells(i, "AC").Value < shData.Cells(3, "AC").Value Then
'            shData.Range("AC" & i).Font.Color = vbRed
'            shData.Range("AC" & i).Font.Bold = True
'        Else:
'            shData.Range("AC" & i).Font.Color = vbBlack
'            shData.Range("AC" & i).Font.Bold = False
'        End If
'NextFor k_i = 1 To 7If shData.Cells(i - 1, 5) <> "" ThenshData.Cells(i - 1, 5 + k_i) = shData.Cells(i - 1, 14 + k_i) / shData.Cells(i - 1, 5)End IfNextWorkbooks(summaryFile).Close SaveChanges:=FalseEnd Sub

以上代码中,可以总结几个重点技巧

1.vba读取txt文档并逐行读取字符串,利用split等方法提取特定的字符串;
2.定向标识,当读取内容行的字符串有多行无法区别,则采用跨行找可识别的行,并作为识别标识,如上代码中的例子;

        If LineText_TVL = "(210)" Then     '定向标识,当读取内容行的字节无法区别,则采用跨行识别Light_i = 1End IfIf LineText_TVL = "(70)" Then      '定向标识Light_j = 1End If

3.采用一维数组(二维数组)读取目标字符串,再将目标字符串一次性写入单元格,快速高效,可以提高代码运行速度;
4.处理数据时多组织的平均值和最小值,尤其是最小值的取法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习笔记NO.27

Java异常 异常处理在Java编程中是一项至关重要的技术&#xff0c;它有助于增强程序的稳定性和可靠性。 1.为什么需要处理异常&#xff1f; 在编写Java程序时&#xff0c;我们无法保证代码的100%正确性&#xff0c;因为各种意外情况可能会导致程序出现错误。这些意外情况包括但…

二维码门楼牌管理应用平台建设:实现民主参与的新途径

文章目录 前言一、二维码门楼牌管理应用平台的兴起二、投票表决功能的实现三、居民参与度的提升四、面临的挑战与前景展望 前言 在数字化时代&#xff0c;二维码技术的应用已经渗透到我们生活的方方面面。近期&#xff0c;二维码门楼牌管理应用平台的建设成为了社区治理的一大…

学习嵌入式系统开发学习课程有哪些

学习嵌入式系统开发需要掌握一些基础的编程知识和硬件知识&#xff0c;以下是一些常见的嵌入式系统开发学习课程和资源&#xff1a; 1. **C/C编程课程**&#xff1a;掌握好C/C编程语言是嵌入式系统开发的基础&#xff0c;可以通过在线教育平台如Coursera、Udemy、edX等搜索相关…

[flask]请求全局钩子

flask从入门到精通之钩子、异常、context、jinjia模板、过滤器 - 异步非阻塞 - 博客园 (cnblogs.com) 参考的这个博客&#xff0c;但有一个需要注意的是&#xff0c;最新版本的flask不知道是不是更新了还是怎么了&#xff0c;他的before_first_request不见了&#xff0c;如果继…

Vue2源码 —— 数据响应式实现

Vue2源码 —— 数据响应式实现 配置项 //package.json {"name": "vue","version": "1.0.0","main": "index.js","scripts": {"dev": "rollup -cw"},"author": "&…

Linux非root用户安装mysql5.7

1、下载安装包MySQL :: Download MySQL Community Server 点击Archives 我下载的是5.7.27版本&#xff0c;linux主机直接选择linux-Generic即可&#xff0c;选择第一个包下载即可 2、安装mysql 解压 shell> tar xzvf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz shell&g…

VUE2实现元素抖动的指令

指令代码 要实现Vue2的指令&#xff0c;可以按照以下步骤进行&#xff1a; 创建一个指令对象。 export default {inserted: (el, binding) > {// 触发抖动效果if (!binding.value) return el.classList.remove(shake-animation)el.classList.add(shake-animation)const a…

抽象类和接口的简单认识

目录 一、抽象类 1.什么是抽象类 2.抽象类的注意事项 3.抽象类与普通类的对比 二、接口 1.接口的简单使用 2.接口的特性 3.接口的使用案例 4.接口和抽象类的异同 一、抽象类 所谓抽象类&#xff0c;就是更加抽象的类&#xff0c;也就是说&#xff0c;这个类不能具体描…

等级保护测评无补偿因素的高风险安全问题判例(共23项需整改)

层面 控制点 要求项 安全问题 适用范围 充分条件 整改建议简要 安全物理环境 基础设施位置 应保证云计算基础设施位于中国境内 1.云计算基础设施物理位置不当 二级及以上 相关基础设施不在中国境内 云平台相关基础设施在中国境内部署 安全通信网络 网络架构 应…

NFC RC522开发记录

文章目录 一、ID卡、IC卡(M1卡、CPU卡)的区别二、RC522读写操作1. 数据读写流程三、RC522驱动代码1. RC522 与 STM32 的接线图2. RC522.c3. RC522.h4. main.c一、ID卡、IC卡(M1卡、CPU卡)的区别 ID卡 :只存储了ID号,设备识别ID号,没有算法可言,容易复制,安全性低IC卡包含了…

ALPHA开发板上PHY网络芯片LAN8720:常用的几个寄存器功能

一. 简介 正点原子的开发板 ALPHA开发板&#xff0c;有线网络硬件方案所使用的也是最常用的一种方案&#xff0c;IMX6ULL芯片内部是自带 MAC网络芯片的&#xff0c;所以&#xff0c;也就是采用 "SOC内部集成网络MAC外设 PHY网络芯片方案"。 前面一篇文章简单了解了…

Asp.net Core 中一键注入接口

Asp.net Core 中一键注入接口 前言准备开始使用 前言 在之前开发Asp.Net Core程序时遇到接口需要一个一个的注入到Services中,当有非常多的接口需要注入时会显得代码成为了一座山,这里记录一下如何通过接口的命名一键自动注入. 准备 IDE: Visual studio 2022 .Net版本:.Net …

机器学习——最优化模型

最优化模型的概述&#xff1a; 从某种程度上说&#xff0c;我们的世界是由最优化问题组成的。每一天&#xff0c;我们的生活都面临无数的最优化问题&#xff1a;上班怎么选择乘车路线&#xff0c;才能舒服又快速地到达公司&#xff1b;旅游如何选择航班和宾馆&#xff0c;既省…

不可变集合及Stream流

若希望某个数据是不可修改的&#xff0c;就可以考虑使用不可变集合&#xff0c;以提高安全性&#xff1b;&#xff08;JKD9之后才有&#xff09; List不可变集合&#xff1a; public static void main(String[] args) {/*创建不可变的List集合"张三", "李四&q…

conda 创建 python3.10.12 环境

conda 创建 python3.10.12 环境 介绍使用前置条件&#xff1a;安装 conda配置环境变量验证 Conda 安装结果创建环境&#xff1a;python激活 Anaconda 环境 验证 Python 版本。 介绍 Conda是一个开源的包管理和环境管理系统&#xff0c;由Continuum Analytics公司开发。它可以安…

python之@overload

from typing import overloadoverload def repeat(s: str, count: int) -> str:...overload def repeat(s: bytes, count: int) -> bytes:...这段代码是在定义一个名为repeat的函数&#xff0c;其中使用了Python的类型注解和装饰器overload来进行重载&#xff08;Overloa…

批量爬取招聘网站【Boss直聘】上工作岗位的招聘信息

不管是学生还是工作的小伙伴&#xff0c;估计都对不同岗位工作几年的薪酬水平比较感兴趣。本文提供爬取招聘网站&#xff0c;获取某类工作招聘信息的实现逻辑和代码。具体的实施步骤是&#xff1a;明确爬取的招聘网站—确定爬取的工作城市—确定爬取的岗位—获取岗位的招聘子链…

学习Python渗透第14天:用python实现sql注入

sql注入这个漏洞一直位于owasp列出的漏洞排行榜的前几位&#xff0c;虽然这个漏洞的使用难度很低&#xff0c;但是破坏力却极其的大。sql注入的原理是将原本的sql语句与用户可控的参数进行了拼接&#xff0c;形成了非预期的sql语句的执行&#xff0c;从而可能造成信息泄露或者如…

Sy6 编辑器vi的应用(+shell脚本3例子)

实验环境&#xff1a; 宿主机为win11&#xff0c;网络&#xff1a;10.255.50.5 6389 WSL2 ubuntu 目标机的OS&#xff1a;Ubuntu 内核、版本如下&#xff1a; linuxpeggy0223:/$ uname -r 5.15.146.1-microsoft-standard-WSL2 linuxpeggy0223:/$ cat /proc/version Linux vers…

【Blockchain】区块 | 节点 | 共识机制 | 公链 | 联盟链 | 以太坊 | DApp | 智能合约

Blockchain 初识区块链区块链是什么什么是区块什么是节点什么是分布式什么是共识机制工作量证明(Proof of Work, PoW)权益证明(Proof of Stake, PoS)历史证明(Proof of History, PoH)权威证明(Proof of Authority, PoA)信誉共识(Proof of Reputation, PoR)存储证明(Proof of St…