標題不太好,所以這裏是解釋。匹配單元格值並補償重複項
我需要將列A中的單元格值與列B匹配,以查找列B中缺少的單元格值。 問題是可能存在重複的值。即列A有兩個「橙」,而列B有一個「橙」。在這種情況下,缺少一個「橙色」。
我會寫的,let's說,列C.
我的做法一直是缺失值,試圖創建valuse形式A列中潤B列的值的集合對收集和刪除有一場比賽。然後將其餘值寫入C列。
但是,正如您可能知道集合無法處理重複值。
我認爲使用數組,但從數組中刪除單元格似乎不是我所見過的簡單事情。
我的限制是我無法對我在excel文件中的數據進行任何更改。 I.e刪除數據或爲匹配的單元格添加顏色等,這意味着我無法以方便的方式標記匹配的匹配項。
我沒有使用字典的經驗,或者如果它有任何解決方案,但我不確定這是一種可行的方法,因爲它需要檢查參考。 我不認爲將數據複製到第二張Excel表是正確的方法,因爲這可能會混淆計算機上正在進行的其他事情。
問題很簡單,還有什麼替代方案?如果不是,我將不得不使用我已有的工具進行解決。但如果有一種方法,我還沒有找到...
這是我寫的收集方法。
Sub Test()
Dim wb As Workbook
Dim ws As Worksheet
Dim cell As Range
Dim rng As Range
Dim colec As Collection
Set colec = New Collection
Set wb = ActiveWorkbook
Set ws = wb.ActiveSheet
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(5, 1))
For Each cell In rng.Cells
If ExistsInCollection(colec, CStr(cell.Value)) = False Then
On Error Resume Next
colec.Add cell.Value, CStr(cell.Value) 'Adds the first selected range to collection
On Error GoTo 0
Else
colec.Add cell.Value
End If
Next cell
Set rng = ws.Range(ws.Cells(1, 2), ws.Cells(4, 2))
For Each cell In rng.Cells
On Error Resume Next
colec.Remove (CStr(cell.Value))
On Error GoTo 0
Next cell
End Sub
這是我複製的函數,它檢查集合中是否存在一個值。
'Copied from outside source
Private Function ExistsInCollection(pColl, ByVal pKey As String) As Boolean
On Error GoTo NoSuchKey
If VarType(pColl.Item(pKey)) = vbObject Then
' force an error condition if key does not exist
End If
ExistsInCollection = True
Exit Function
NoSuchKey:
ExistsInCollection = False
End Function
請告訴我,如果我必須澄清任何事情。
我很感謝您提供的任何幫助!
/Henrik
使用字典而不是與價值作爲關鍵和「價值」中的計數 –
@Henrick - 我最初用一個字典給出了一個答案,但是在重讀你的問題之後,突然明白你的意思是「它需要檢查一個參考」,我添加了一個替代方法,定義類型和可變大小的數組。 – YowE3K