在我的 Excel 工作表中,我有几个值需要比较和总结以符合案例定义的条件。
工作表包含以下信息:
姓名(A)、日期(B)、工作时间(C)、其他信息(D-H)。
我想通过 VBA 检查 Hours worked 是否超过值“10”。如果是,则代码需要比较上一行中的 Name 是否等于当前 AND Date< 中的 Name/strong> 两行彼此相等。
如果所有这些条件都成立,则应汇总工作时间,并将结果复制到工作表 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 = 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 中缺少 continue 你还必须更改条件(或使用 Goto
,但这不是我的首选解决方案):
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
编辑:
因为值与前一行进行比较,for
循环需要从 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
关于VBA,Excel - 比较多个条件的行,复制并在新工作表中添加结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44322975/