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
不能在里面使用If
… Then
。
由于缺乏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。