我有一个电子表格,其中包含一个名为“ Raw:”的工作表,其中包含:
我在每列包括名称的True语句的开始和结束时间之后。必须在新工作表的不同列(例如A到C)中列出
我已经使用INDEX,MATCH和一些变通方法在Excel中完成了上述操作,但我意识到每列将有多个开始/停止时间,并且可能会有数年的数据。
我有VBA代码。有一个速度问题(很慢)。我知道有更聪明的方法可以做到这一点。
Sub Export_Start()
Dim Export_Row As Integer
Dim ColName As String
Dim Max_Col As Integer
Dim Search_Col As Integer
Dim Max_Row As Integer
Dim I As Integer
Dim Ref_Cell As Integer
Dim Test_Cell As Integer
Export_Row = 2
Search_Col = 0
Max_Col = Sheets("Raw").Range("A1").SpecialCells(xlCellTypeLastCell).Column
Max_Row = Sheets("Raw").Range("A1").SpecialCells(xlCellTypeLastCell).Row
I = 4
Do
If I = 4 And Sheets("Raw").Range("B" & I).Offset(0, Search_Col).Value = 1 Then ' Determine if equipment is on at start of period
Export_Row = Sheets("Sheet1").Range("B2:B" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row ' Determine Start of Export File
Sheets("Sheet1").Range("B" & Export_Row).Value = Sheets("Raw").Range("A" & I + 1).Value ' Write Start Time
ColName = Sheets("Raw").Columns("B").Offset(0, Search_Col).Cells(1) ' Determine Header Name (Tag)
Sheets("Sheet1").Range("D" & Export_Row).Value = ColName ' Write Tag Number
I = I + 1 ' Increase Search Row
End If
Do
Ref_Cell = Sheets("Raw").Range("B" & I).Offset(0, Search_Col).Value ' Value Current Row
Test_Cell = Sheets("Raw").Range("B" & I - 1).Offset(0, Search_Col).Value ' Value Next Row
If Ref_Cell <> Test_Cell Then ' If different
If Ref_Cell = 1 Then ' If On
Export_Row = Sheets("Sheet1").Range("B2:B" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row ' Determine Export Row
Sheets("Sheet1").Range("B" & Export_Row).Value = Sheets("Raw").Range("A" & I + 1).Value ' Write Start Time
ColName = Sheets("Raw").Columns("B").Offset(0, Search_Col).Cells(1) ' Determin Header Name
Sheets("Sheet1").Range("D" & Export_Row).Value = ColName ' Write Tag Number (Tag)
Else ' If Off
Export_Row = Sheets("Sheet1").Range("C2:C" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row ' Determine Export Row
Sheets("Sheet1").Range("C" & Export_Row).Value = Sheets("Raw").Range("A" & I).Value ' Write Stop Time
End If
End If
I = I + 1 ' Increase Search Row
If I = Max_Row Then ' When Max Search Row Reached
Export_Row = Sheets("Sheet1").Range("C2:C" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row ' Determine Export Time
Sheets("Sheet1").Range("C" & Export_Row).Value = Sheets("Raw").Range("A" & Max_Row).Value ' Write Stop Time
End If
Loop Until I = Max_Row ' Loop Untill Max Row
Search_Col = Search_Col + 2 ' Start With Next Column
I = 4 ' Reset Search Row
Loop Until Search_Col = Max_Col ' Loop till maximum column is reached
End Sub