根据特殊单元格值划分Excel工作表

时间:2018-09-10 23:05:51

标签: java excel vba jxl

我在excel中有一个数据表,行长约950000,有7列。我想根据V5列数据进行划分。 V5将以秒为单位的时间将数据保存在一小时内,因此我需要enter image description here将数据划分为几张纸,每张纸包含与一分钟有关的所有值,依此类推,直到完成拆分为止。

如果在微型VBA方面有帮助的话,那会很好。

这就是我在VBA中可以做的事情

Sub SPLIT()
Dim ws1, ws2 As Worksheet
  Dim row2 As Integer
  Dim rw As Range
  Dim dv, fv As Variant

  Set ws1 = Sheets("sheet1")
  Set ws2 = Sheets.Add
  row2 = 1

  For Each rw In ws1.Rows
    If rw.Cells(1, 5).Value2 = 00:00:59  Then " and so on until i divide each minute data rows alone"
      Exit For
    End If

2 个答案:

答案 0 :(得分:0)

所以我为您准备了一些东西,可以帮助您入门。您可能必须针对适合您要求的确切时间调整代码(这将是一个很好的学习机会!)。请注意,您可以采用将这些范围设置为固定范围或可变范围的方法(即:以分钟/秒/小时为增量,或者是我现在有的固定范围)

要进行此设置,您的工作文件中需要三张纸,分别是(1)小时,(2)分钟和(3)秒。

在设置代码之后,将根据行是在一分钟,一小时以下还是一小时以上来对行进行排序并放入边界。

要严格按照自己的要求调整代码,如果有任何疑问,请随时告诉我!

Function Last_Row(Sheet_Name As String)
    Last_Row = Sheets(Sheet_Name).Range("A" & Sheets(Sheet_Name).Rows.Count).End(xlUp).Row
End Function

Sub AllocateSheet()

Dim Cell As Variant
Dim Cell_Range As Range
Set Cell_Range = Range("E2:E990000")

Seperator_Second = TimeValue("00:00:01")
Seperator_Minute = TimeValue("00:01:00")
Seperator_Hour = TimeValue("01:00:00")


For Each Cell In Cell_Range
    If Cell.Value >= Seperator_Hour Then
        Rows(Cell.Row).Copy Destination:=Sheets("Hours").Rows(Last_Row("Hours") + 1)
    ElseIf Cell.Value <= Seperator_Hour And Cell.Value >= Seperator_Minute Then
        Rows(Cell.Row).Copy Destination:=Sheets("Minutes").Rows(Last_Row("Minutes") + 1)
    ElseIf Cell.Value <= Seperator_Minute And Cell.Value >= Seperator_Second Then
        Rows(Cell.Row).Copy Destination:=Sheets("Seconds").Rows(Last_Row("Seconds") + 1)
    End If
Next Cell


End Sub

答案 1 :(得分:0)

我花了几分钟的时间来编写此代码,以帮助编辑此代码,因此我可以将工作表中的总行划分为1000000行,并且该代码使循环仅遍历E列中的60000行。我不知道为什么它只需要从1到6000 E1:E6000并在60000行上循环就可以了。以及我如何制作新的床单  将其粘贴到代码中。

Option Explicit

Sub Test()

ti=TimeValue("00:00:00")
Dim Cell As Range

With Sheets(1)

    For Each Cell In .Range("E1:E6000" & .Cells(.Rows.Count, "E").End(xlUp).Row)
        If Cell.Value <= ti Then
            .Rows(Cell.Row).Copy Destination:=Sheets("first minute").Rows(Cell.Row)
        End If
    Next Cell
End With

End Sub