列中正确/错误范围的返回日期开始和结束时间

时间:2019-01-03 06:33:02

标签: excel vba

我有一个电子表格,其中包含一个名为“ Raw:”的工作表,其中包含:

  • A列中的时间戳记(日期和时间)(从第4行开始)
  • 第一行中的列名(xxxx.pv)(有时会跳过一列)
  • 在每个时间戳的每个列名称下,
  • 真/假(1/0)

我在每列包括名称的True语句的开始和结束时间之后。必须在新工作表的不同列(例如A到C)中列出

  • 2019年3月1日06:00:00 2019年3月1日06:10:15 xxxx1.pv
  • 2019年3月1日06:20:00 2019年3月1日06:21:15 xxxx1.pv
  • 2/1/2019 06:01:12 22/6/2019 21:14:43 xxxx2.pv

我已经使用INDEX,MATCH和一些变通方法在Excel中完成了上述操作,但我意识到每列将有多个开始/停止时间,并且可能会有数年的数据。

enter image description here

Excel Sheet

我有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

0 个答案:

没有答案