2017-02-16 71 views
0

這裏是我的數據之前:如何計算兩列中的匹配並重置計數器?

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 

東西是關閉與櫃檯,但我不知道它是什麼。

+1

你有興趣在非VBA的解決方案? – CallumDA

回答

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

怎麼樣SQL:

SELECT F1, F2, COUNT(*) 
FROM [SheetName$] 
GROUP BY F1, F2 

使用ADO連接到Excel工作表,並使用CopyFromRecordset將結果粘貼到新工作表中。

一個類似的例子here,和一些對ADO的引用可以找到here

+0

這樣做。我知道這就是這樣的事情,但我開始走錯了路,無法自己恢復。謝謝!! – ryguy72

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 
+0

哇!很酷!我從來不知道你可以用VBA做到這一點!感謝分享!!! – ryguy72

+0

不客氣。那麼你採用了哪種解決方案? – user3598756

+0

嗯,我想我會運行YowE3K中的一個,只是因爲我更好地理解邏輯。儘管我非常感謝你的努力!看到完全不同的方法可以得到完全相同的結果是非常有趣的! – ryguy72