簡體   English   中英

VBA,Excel - 比較多個條件的行,復制並在新工作表中添加結果

[英]VBA, Excel - Compare rows for multiple conditions, copy and add up result in new sheet

在我的Excel工作表中,我需要比較幾個值,並在定義的條件匹配的情況下總結。

工作表包含以下信息:

姓名(A),日期(B),工作小時數(C),其他信息(DH)。

通過VBA,我想檢查工作小時數是否超過“10”。 如果確實如此,則代碼需要上一行是否在名稱等於名稱在當前兩行的日期等於相互比較。

如果所有這些條件都滿足的工作時間應該總結,並將結果復制到工作表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缺乏繼續,你還必須改變條件(或使用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

你的Next i在錯誤的地方。 應該是在所有的If語句之后。

我認為正確地比較這些值。

如果您在復制小時時遇到問題,只需先將整行復制到sheet2,然后再單獨更新小時工作單元格,如下所示:

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

當然用正確的細胞坐標替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM