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

标签 vba excel

在我的 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/

相关文章:

excel - 在 protected 工作表上运行宏

VBA Excel Outlook 电子邮件正文格式

Java Apache POI Excel 文件使用诸如 HeaderColumn 策略之类的方法映射到数据库对象中?

excel - 如何判断sumproduct是否需要用CSE插入?

python - 将带有公式的 Pandas DataFrames 保存到 xlsx 文件

xml - 通过 VBA 将 XML 加载到 Excel

vba - 如何从另一张工作表中复制行并将它们粘贴到其中包含表格的工作表中?

excel - 创建对象 ("MSXML2.ServerXMLHTTP.6.0")

excel - 如何将 SUMPRODUCT 与 INDEX 和 MATCH 公式结合起来?

string - 从 excel 中将字符串读入 Matlab?