VBA,Excel – 比较多个条件的行,将结果复制并添加到新工作表中

在我的Excel工作表中,我有几个值,我需要比较和总结案件定义的标准匹配。

工作表包含这些信息:

姓名(A),date(B),工作时间(C),其他信息(DH)。

通过VBA我想检查工作小时数是否超过值“10”。 如果是这样,那么代码需要比较,如果前一行中的名称等于当前的名称和两个行的date相等。

如果所有这些条件都是真的,那么工作小时数应该被总结,并且结果应该被复制到工作表2中。而且所需的信息如姓名,date和其他信息应该被复制。

现在我试了这个:

Sub check_Click() Dim s1 As Worksheet, s2 As Worksheet Dim N As Long, i As Long, p As Long Set s1 = Sheets(1) Set s2 = Sheets(2) N = s1.Cells(s1.Rows.Count, "C").End(xlUp).Row p = 1 For i = 1 To N If IsNumeric(s1.Range("C" & i)) And s1.Cells(i, "C").Value < 10 Then Next i ElseIf s1.Cells(i, "B").Value = s1.Cells(i - 1, "B").Value And s1.Cells(i, "A").Value = s1.Cells(i - 1, "A").Value Then s1.Range(Cells(i, "A"), Cells(i, "C")).Copy s2.Cells(p + 5, 1) End If End Sub 

正如你可能看到的代码不工作 – 不幸的。

我希望有人能照亮我的路。

最棘手的部分是比较前一行并总结小时。

提前致谢

代码是不正确的。 Next i不能在里面使用IfThen

由于缺乏VBA的继续,你也必须改变条件(或使用Goto ,但这不是我的首选解决scheme):

 Sub check_Click() Dim s1 As Worksheet, s2 As Worksheet Dim N As Long, i As Long, p As Long Set s1 = Sheets(1) Set s2 = Sheets(2) N = s1.Cells(s1.Rows.Count, "C").End(xlUp).Row p = 1 For i = 1 To N If IsNumeric(s1.Range("C" & i)) And s1.Cells(i, "C").Value >= 10 Then If s1.Cells(i, "B").Value = s1.Cells(i - 1, "B").Value And s1.Cells(i, "A").Value = s1.Cells(i - 1, "A").Value Then s1.Range(Cells(i, "A"), Cells(i, "C")).Copy s2.Cells(p + 5, 1) End If End If Next i End Sub 

编辑:

因为值与前一行进行比较,所以循环路由从2开始。

 Sub check_Click() Dim s1 As Worksheet, s2 As Worksheet Dim N As Long, i As Long, p As Long Set s1 = Sheets(1) Set s2 = Sheets(2) N = s1.Cells(s1.Rows.Count, "C").End(xlUp).Row p = 1 For i = 2 To N ' Iterate from second row If IsNumeric(s1.Range("C" & i)) And s1.Cells(i, "C").Value >= 10 Then If s1.Cells(i, "B").Value = s1.Cells(i - 1, "B").Value And s1.Cells(i, "A").Value = s1.Cells(i - 1, "A").Value Then s1.Range(Cells(i, "A"), Cells(i, "C")).Copy s2.Cells(p + 5, 1) End If End If Next i End Sub 

你的Next i是在一个错误的地方。 应该是所有的If语句。

我认为比较值是正确的。

如果您在复制小时总结时遇到问题,请将整行复制到sheet2中,然后分别使用类似下面的方法更新小时工作单元:

 Worksheets("sheet2").Cells(i,3).Value = Cells(i,3).Value + Cells(i-1,4).Value 

当然用正确的单元坐标replace。