函数法 这个问题实际是从一个全集中,取出一个子集的补集。简单来说,就是在所有的名单中,已知了一部分名单,求剩余部分的名单。
1对应的那些名字是已检测过的名单,因为它们在已检测名单中出现过。0对应的那些名字是未经检测过的名单,因为它们在已检测名单中没有出现过。 countif两个区域的顺序一定要搞清楚,是在已检测名单中统计所有名单上每个人的个数。 vba代码法 Sub 未检测名单() Dim d As Object Dim arr, brr, i, j, n, crr() Set d = CreateObject("scripting.dictionary") '创建字典对象,赋给对象变量d arr = Range("c2", Cells(Rows.Count, "c").End(xlUp)) '将C2到C列最后一个非空单元格赋给数组变量arr For i = 1 To UBound(arr) d(arr(i, 1)) = "" '将arr的元素(C列名单)循环装入字典 Next i brr = Range("a2", Cells(Rows.Count, "a").End(xlUp)) '将A2到A列最后一个非空单元格赋给数组变量brr ReDim Preserve crr(1 To UBound(brr), 1 To 1) '重定义结果数组crr的大小,使其和brr大小一样 For j = 1 To UBound(brr) If Not d.Exists(brr(j, 1)) Then '如果brr的元素(A列名单)在字典中不存在,则... n = n + 1 '未检测人数累加1 crr(n, 1) = brr(j, 1) '将brr的当前元素写入crr相应的位置 End If Next j Range("f2:f9999").ClearContents '清空f2:f9999的内容 If n > 0 Then Range("f2").Resize(n) = crr '如果未经检测人数大于0,则将crr输出到F列 Set d = Nothing '释放字典 End Sub https://pan.baidu.com/s/1gMrgYkkyjcRsh43Pk9MnTQ |
|