标题不太好,所以这里是解释。匹配单元格值并补偿重复项
我需要将列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