我在一列中获得了具有唯一ID号的数据。这被粘贴到"原始数据"用户提供的表格。
然后,我已经掌握了操纵"原始数据"的宏,包括将其中一些存档在"档案"包含身份证号码的工作表。
我想检查是否有任何"新" "原始数据"中的ID号,如果是这样,则将包含ID号的一些数据的新行添加到"存档"片材。
我已经用Google搜索并检查了这里。看起来我想要使用Collection?到目前为止从未遇到过这种情况,不知道从哪里开始。
很抱歉,这不是最结构化的问题,并且它不包含任何代码。不知道如何开始。
应该注意的是,此对帐只需要采用一种方式 - 我不需要删除" old"来自"档案馆"的唯一身份证片材。
谢谢!
答案 0 :(得分:0)
如果您特别想要使用集合,而不是Range.Find
,您可以这样做。
尽管在VBA中以这种方式处理错误最好避免大多数情况,但是为了迭代集合,它可以产生更快且通常更简洁的代码。
我使用了Rawdata
和Archive
工作表标签的命名范围,因此您需要根据自己的情况进行调整。这样做是使用集合存储Archive
中已有的唯一项目,并将这些项目与Rawdata
中的项目进行比较 - 当在Rawdata
中找到尚未出现的新(唯一)项目时Archive
,它被添加到工作表(和集合)中。
Sub IDcollection()
Dim IDcoll As New Collection
Dim cells, Rng, Rng_a As Range
Set Rng = Worksheets("Rawdata").Range("IDRANGE")
Set Rng_a = Worksheets("Archive").Range("IDRANGE_A")
'IDRANGE looks like string IDs 'abc', 'ab1',etc
'get unique IDs already in ARCH sheet via named range
On Error Resume Next 'includes only unique items
For Each cells In Rng_a.cells
IDcoll.Add cells.Text, cells.Text
'use the IDs as the KEY in the VBA Collection
Next cells
'check for unique items not in Archive, but in Rawdata (i.e. new items)
On Error Resume Next
For Each cells In Rng
IDcoll.Item cells.Text
If Err.Number <> 0 Then
IDcoll.Add cells.Text, cells.Text
LastRow = Rng_a.Rows(Rows.Count).End(xlUp).Row + 1
Rng_a(LastRow).Value = cells.Text
Err.Clear
End If
Next
End Sub
只需将其粘贴到VBA中用于工作表的模块中,如上所述设置一些命名范围,填充虚拟数据。