VBA 中的 COUNTIFS 用于多列和多行
COUNTIFS in VBA for multiple columns and rows
我正在尝试计算每个用户的缺陷数量。
R 到 X 列是手动计算的。
我做了一个子计算列X,如下:
Sub ci()
Set wb = ThisWorkbook
Set fs = wb.Worksheets("Final")
Set ds = wb.Worksheets("dashboard")
LastRow1 = fs.Range("AN" & fs.Rows.Count).End(xlUp).Row
LastRow2 = fs.Range("AO" & fs.Rows.Count).End(xlUp).Row
Set r1 = fs.Range("AN2:AN" & LastRow1)
Set r2 = fs.Range("AO2:AO" & LastRow2)
x1 = ds.Range("X1")
q2 = ds.Range("Q2")
q3 = ds.Range("Q3")
q4 = ds.Range("Q4")
q5 = ds.Range("Q5")
q6 = ds.Range("Q6")
q7 = ds.Range("Q7")
q8 = ds.Range("Q8")
ds.Range("X2") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q2)
ds.Range("X3") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q3)
ds.Range("X4") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q4)
ds.Range("X5") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q5)
ds.Range("X6") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q6)
ds.Range("X7") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q7)
ds.Range("X8") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q8)
End Sub
Q列总是有相同的值,但问题是用户数量会增加或减少。
如何为用户集成一个范围并通过填充所有列来简化我的工作(真诚地,我不想为每一列复制代码。
未测试,但您可能可以替换它:
x1 = ds.Range("X1")
q2 = ds.Range("Q2")
q3 = ds.Range("Q3")
q4 = ds.Range("Q4")
q5 = ds.Range("Q5")
q6 = ds.Range("Q6")
q7 = ds.Range("Q7")
q8 = ds.Range("Q8")
ds.Range("X2") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q2)
ds.Range("X3") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q3)
ds.Range("X4") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q4)
ds.Range("X5") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q5)
ds.Range("X6") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q6)
ds.Range("X7") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q7)
ds.Range("X8") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q8)
有了这个:
Dim i As Integer
Dim ZZ As Integer
ZZ = 18 'column R
Do Until ds.Cells(1, ZZ) = ""
For i = 2 To 8 Step 1 'i=2 because data starts at row 2
ds.Cells(i, ZZ) = Application.WorksheetFunction.CountIfs(r1, ds.Cells(1, ZZ), r2, ds.Cells(i, 17)) '17 is column Q
Next i
ZZ = ZZ + 1
Loop
对于每一列,它将循环从第 2 行到第 8 行的所有行,从第 R 列开始,直到找到列的第 1 行中的空单元格。所以它会做 R,S,T,...等等
我正在尝试计算每个用户的缺陷数量。
R 到 X 列是手动计算的。
我做了一个子计算列X,如下:
Sub ci()
Set wb = ThisWorkbook
Set fs = wb.Worksheets("Final")
Set ds = wb.Worksheets("dashboard")
LastRow1 = fs.Range("AN" & fs.Rows.Count).End(xlUp).Row
LastRow2 = fs.Range("AO" & fs.Rows.Count).End(xlUp).Row
Set r1 = fs.Range("AN2:AN" & LastRow1)
Set r2 = fs.Range("AO2:AO" & LastRow2)
x1 = ds.Range("X1")
q2 = ds.Range("Q2")
q3 = ds.Range("Q3")
q4 = ds.Range("Q4")
q5 = ds.Range("Q5")
q6 = ds.Range("Q6")
q7 = ds.Range("Q7")
q8 = ds.Range("Q8")
ds.Range("X2") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q2)
ds.Range("X3") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q3)
ds.Range("X4") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q4)
ds.Range("X5") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q5)
ds.Range("X6") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q6)
ds.Range("X7") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q7)
ds.Range("X8") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q8)
End Sub
Q列总是有相同的值,但问题是用户数量会增加或减少。
如何为用户集成一个范围并通过填充所有列来简化我的工作(真诚地,我不想为每一列复制代码。
未测试,但您可能可以替换它:
x1 = ds.Range("X1")
q2 = ds.Range("Q2")
q3 = ds.Range("Q3")
q4 = ds.Range("Q4")
q5 = ds.Range("Q5")
q6 = ds.Range("Q6")
q7 = ds.Range("Q7")
q8 = ds.Range("Q8")
ds.Range("X2") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q2)
ds.Range("X3") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q3)
ds.Range("X4") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q4)
ds.Range("X5") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q5)
ds.Range("X6") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q6)
ds.Range("X7") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q7)
ds.Range("X8") = Application.WorksheetFunction.CountIfs(r1, x1, r2, q8)
有了这个:
Dim i As Integer
Dim ZZ As Integer
ZZ = 18 'column R
Do Until ds.Cells(1, ZZ) = ""
For i = 2 To 8 Step 1 'i=2 because data starts at row 2
ds.Cells(i, ZZ) = Application.WorksheetFunction.CountIfs(r1, ds.Cells(1, ZZ), r2, ds.Cells(i, 17)) '17 is column Q
Next i
ZZ = ZZ + 1
Loop
对于每一列,它将循环从第 2 行到第 8 行的所有行,从第 R 列开始,直到找到列的第 1 行中的空单元格。所以它会做 R,S,T,...等等