[英]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.