以下是我的数据:
A Ron
A Ron
B Jeremy
C Jeremy
C Teddy
C Teddy
C Teddy
D George
D George
这是我想要看到的:
A Ron 2
B Jeremy 1
C Jeremy 1
C Teddy 3
D George 2
这是我的非工作脚本:
Sub Macro()
i = 1
Dim lngRow As Long
For lngRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If Range("A" & lngRow) = Range("A" & lngRow - 1) And _
Range("B" & lngRow) = Range("B" & lngRow - 1) Then
i = i + 1
Range("C" & lngRow - 1).Value = i
Rows(lngRow).Delete
End If
Next
i = 1
End Sub
柜台上有些东西已关闭,但我不知道它是什么。
答案 0 :(得分:1)
您的(第二个)i = 1
位置错误 - 每次“"”键发生更改时,您需要重置i
:
Sub Macro()
i = 1
Dim lngRow As Long
For lngRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
If Range("A" & lngRow) = Range("A" & lngRow - 1) And _
Range("B" & lngRow) = Range("B" & lngRow - 1) Then
i = i + 1
Range("C" & lngRow - 1).Value = i
Rows(lngRow).Delete
Else
i = 1
'Also need to set the previous "total" here, just in case
'it is the only record for this "key"
Range("C" & lngRow - 1).Value = i
End If
Next
End Sub
答案 1 :(得分:1)
一些SQL怎么样:
SELECT F1, F2, COUNT(*)
FROM [SheetName$]
GROUP BY F1, F2
使用ADO连接到Excel工作表,然后使用CopyFromRecordset将结果粘贴到新工作表中。
可以找到类似的示例here,并且可以找到对ADO的一些引用{。{3}}。
答案 2 :(得分:1)
你可以使用Dictionary
对象:
Sub Main()
Dim cell As Range, dataRng As Range
Set dataRng = Range("A1").CurrentRegion
With CreateObject("Scripting.Dictionary")
For Each cell In dataRng.Columns(1).Cells
.Item(Join(Application.Transpose(Application.Transpose(cell.Resize(, 2).Value)), "|")) = .Item(Join(Application.Transpose(Application.Transpose(cell.Resize(, 2).Value)), "|")) + 1
Next cell
dataRng.ClearContents
dataRng.Columns(1).Resize(.Count).Value = Application.Transpose(.keys)
dataRng.Columns(1).Resize(.Count).TextToColumns DataType:=xlDelimited, Other:=True, OtherChar:="|"
dataRng.Columns(3).Resize(.Count).Value = Application.Transpose(.Items)
End With
End Sub