|
Sub 提取_唯一值() '循环法---雨中漫步<br/> Dim i%, j%, k%, w%, q%, n%, m%, x%, y%, Z%<br/> Dim arrA, arrB, arr1(), arr2(), arr3()<br/> Dim t<br/> t = Timer<br/> Range("D2:F" & Range("D65536").End(xlUp).Row + 1).ClearContents '加1防止清空以后再清空会造成标题删除,所以多选一行!<br/> x = Range("A1").CurrentRegion.Rows.Count<br/> arrA = Range("A2:A" & x)<br/> arrB = Range("B2:B" & x)<br/> ReDim arr1(1 To UBound(arrA) + UBound(arrB), 1 To 1)<br/> ReDim arr2(1 To UBound(arrA), 1 To 1)<br/> ReDim arr3(1 To UBound(arrA), 1 To 1)<br/> ''''''''''以下为求不重复值<br/>' '''---------------------------------------------------------<br/> For x = 1 To UBound(arrA)<br/> arr1(x, 1) = arrA(x, 1) '第一个数组全部装进第三个中<br/> Next x<br/> ''---------------------------------------------------------<br/> For Z = 1 To UBound(arrB) '第二个数组中不重复的才装进第三个中<br/> For y = 1 To UBound(arrA)<br/> If arrB(Z, 1) = arrA(y, 1) Then GoTo 100<br/> Next y<br/> k = k + 1<br/> arr1(x + k - 1, 1) = arrB(Z, 1) '唯一编号的<br/>100:<br/> Next Z<br/> Range("D2").Resize(k + x) = arr1<br/> '''---------------------------------------------------------<br/> ''''''''''以下为求物品1有物品2没有<br/> For i = 1 To UBound(arrA) '第二个数组中不重复的才装进第三个中<br/> n = 0<br/> For j = 1 To UBound(arrB)<br/> n = n + 1<br/> If arrA(i, 1) = arrB(j, 1) Then<br/> GoTo 200<br/> ElseIf arrA(i, 1) <> arrB(j, 1) And n = UBound(arrB) Then<br/> m = m + 1<br/> arr2(m, 1) = arrA(i, 1) '唯一编号的<br/> GoTo 200<br/> End If<br/> Next j<br/>200:<br/> Next i<br/> Range("E2").Resize(m, 1) = arr2<br/> '''---------------------------------------------------------<br/> ''''''''''以下为求物品2有物品1没有<br/> m = 0<br/> For i = 1 To UBound(arrB) '第二个数组中不重复的才装进第三个中<br/> n = 0<br/> For j = 1 To UBound(arrA)<br/> n = n + 1<br/> If arrB(i, 1) = arrA(j, 1) Then<br/> GoTo 300<br/> ElseIf arrB(i, 1) <> arrA(j, 1) And n = UBound(arrB) Then<br/> m = m + 1<br/> arr3(m, 1) = arrB(i, 1) '唯一编号的<br/> GoTo 300<br/> End If<br/> Next j<br/>300:<br/> Next i<br/> Range("F2").Resize(m, 1) = arr3<br/> <br/> MsgBox "提取成功,用时 " & Timer - t & "秒!", 0 + 64, "雨中漫步提示你:"<br/>End Sub |
|