在A列中,有些数字重复。我需要过滤列A并计算列B的总和。如第二张图片所示。
如果列B的总和大于90,则将其计为一。我需要对A列中的每个唯一编号执行相同的操作。
简而言之:我需要知道有多少唯一列A ID的B列总和大于90。
我想要使用“For Each Next”,但由于我无法弄清楚如何使代码仅使用唯一值,我将整个列A复制到不同的工作表,删除了重复项并将其用作参考。
另外我不知道如何使代码只使用公式中的过滤单元格,所以我添加了计算小计公式的单元格并尝试使用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类的AutoFilter方法失败”
我的问题:
如何修复我的代码。
其他问题:
不确定这是否是您所追求的,如果您的数据顺序很重要,但您可以试试这个
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 arguements 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)运行。根据需要进行编辑。