Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA中用于多列和多行的COUNTIFS_Excel_Vba_Countif - Fatal编程技术网

Excel VBA中用于多列和多行的COUNTIFS

Excel VBA中用于多列和多行的COUNTIFS,excel,vba,countif,Excel,Vba,Countif,我正试图计算每个用户所产生的缺陷数量 列R到X是手动计算的 我制作了一个sub来计算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 LastRo

我正试图计算每个用户所产生的缺陷数量

列R到X是手动计算的

我制作了一个sub来计算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行中找到并清空单元格