Vba 如何在同一个子系统中进行过滤、计数和循环
我有一张像图中一样的桌子(只大一点) A列中有些数字重复。我需要过滤A列并计算B列的和。 就像第二张照片 若B列之和大于90,则将其计为一。 我需要对A列中的每个唯一编号执行相同的步骤 简而言之:我需要知道有多少唯一的列A ID的列B的和大于90。 我想使用“For Each Next”,但因为我不知道如何使代码只使用唯一的值,所以我将整个列复制到不同的工作表中,删除重复项并将其用作参考 另外,我不知道如何使代码只使用公式中的过滤单元格,所以我添加了计算小计公式的单元格,并尝试使用VBA代码检查它的值 这就是我到目前为止提出的问题:Vba 如何在同一个子系统中进行过滤、计数和循环,vba,excel,Vba,Excel,我有一张像图中一样的桌子(只大一点) A列中有些数字重复。我需要过滤A列并计算B列的和。 就像第二张照片 若B列之和大于90,则将其计为一。 我需要对A列中的每个唯一编号执行相同的步骤 简而言之:我需要知道有多少唯一的列A ID的列B的和大于90。 我想使用“For Each Next”,但因为我不知道如何使代码只使用唯一的值,所以我将整个列复制到不同的工作表中,删除重复项并将其用作参考 另外,我不知道如何使代码只使用公式中的过滤单元格,所以我添加了计算小计公式的单元格,并尝试使用VBA代码检
Sub SkaiciuotiCB_Click()
Dim rng As Range
Set rng = Sheets("Sheet2").Range("A1:A229")
For Each Cell In rng
Sheets("Sheet1").Range("A2:O2").AutoFilter Field = 8, Criteria1 = Cell.Value
If Sheets("Sheet1").Range("I793").Value >= 90 Then
Sheets("Sheet1").Range("C1").Value = Sheets("Sheet1").Range("C1").Value + 1
End If
Sheets("Sheet1").AutoFilterMode = False
Next
End Sub
此时我得到“运行时错误'1004':Range类的自动筛选方法失败”
我的问题是:
如何修复我的代码
其他问题:
不确定这是否是您想要的,数据的顺序是否重要,但您可以尝试一下
Sub Macro1()
Dim i As Long
Dim currentCustomer As String
Dim currentCustomerDays As Integer
Dim totalCount As Integer
totalCount = 0
'Clear sorting rules
Worksheets("Sheet1").Sort.SortFields.Clear
'Sort by first column
Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("A2:A25") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
'Set sorting arguments and do sort
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:B25")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'run through list
For i = 2 To 25
If currentCustomer = Worksheets("Sheet1").Cells(i, "A").Value Then
currentCustomerDays = currentCustomerDays + Worksheets("Sheet1").Cells(i, "B").Value
Else
If currentCustomerDays > 90 Then totalCount = totalCount + 1
currentCustomer = Worksheets("Sheet1").Cells(i, "A").Value
currentCustomerDays = Worksheets("Sheet1").Cells(i, "B").Value
End If
Next i
If currentCustomerDays > 90 Then totalCount = totalCount + 1
Debug.Print totalCount
End Sub
本示例将贯穿第1页上的表格(A1:B25)。根据需要编辑。为什么不试试透视表呢?这将自动为您提供a中唯一项的列表及其对应的B总和。感谢代码工作得非常完美(只是做了一些小的修改,而不是i=2到25用于i=2到范围(“表1”).Rows.Count)。自从我尝试学习VBA以来,我就试图理解代码的工作原理。我对第二行“如果currentCustomerDays>90,那么totalCount=totalCount+1(在下一个I之后)”感到困惑,为什么它是必要的?循环结束后不保存循环中的结果?这是为了捕获客户ID的最后一次出现。否则它将永远看不到最终客户。另一种选择是循环直到客户之后的第一个空白单元格,从而确保捕获最后一个客户。