Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 兰色幻想

[习题] VBA第8讲作业答案上传贴

[复制链接]
发表于 2008-1-10 00:30 | 显示全部楼层

<p>Sub 唯一的编号()<br/>Range("d2:d23") = ""<br/>Dim mrg As Range, arr(), arr1(), x%, m%, t%, n%,k%<br/>ReDim arr(1 To 22, 1 To 1)<br/>For Each mrg In Range("a2:b11")<br/>If mrg &lt;&gt; "" Then<br/>k = k + 1<br/>arr(k, 1) = mrg<br/>End If<br/>Next mrg<br/>ReDim arr1(1 To 22, 1 To 1)<br/>t = 1<br/>For m = 1 To 22<br/>For x = 2 + t - 1 To 22<br/>If arr(x, 1) = arr(t, 1) Then<br/>arr(x, 1) = ""<br/>End If<br/>Next x<br/>If arr(t, 1) &lt;&gt; "" Then<br/>n = n + 1<br/>arr1(n, 1) = arr(t, 1)<br/>End If<br/>t = t + 1<br/>Next m<br/>Range("d2:d23") = arr1<br/>End Sub</p><p>先把两列合成一列 再去重复 数据都是看着写上去的 Resize也没用 只是为了探讨方法</p>
[此贴子已经被作者于2008-1-10 0:34:29编辑过]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2008-1-10 00:50 | 显示全部楼层

<p>Sub unique()<br/>Dim arr1, arr2, arr3(), i%, j%, k%,x%<br/>arr1 = Range("a2:a11")<br/>arr2 = Range("b2:b11")<br/>Range("d2:d65536").ClearContents<br/>ReDim arr3(1 To UBound(arr1) + UBound(arr2), 1 To 1)<br/>For x = 1 To UBound(arr1)<br/>&nbsp; arr3(x, 1) = arr1(x, 1)<br/>Next x<br/>For i = 1 To UBound(arr2)<br/>&nbsp; For j = 1 To UBound(arr1)<br/>&nbsp;&nbsp;&nbsp; If arr2(i, 1) = arr3(j, 1) Then GoTo 100<br/>&nbsp; Next j<br/>&nbsp;k = k + 1<br/>&nbsp;arr3(x + k - 1, 1) = arr2(i, 1)</p><p>100:<br/>Next i<br/>Range("D2").Resize(x + k, 1) = arr3<br/>End Sub<br/></p><p>Sub 物1减2()<br/>Dim arr1, arr2, arr3(), i%, j%, x%<br/>arr1 = Range("a2:a11")<br/>arr2 = Range("b2:b11")<br/>Range("E2:E65536").ClearContents<br/>ReDim arr3(1 To UBound(arr1) + UBound(arr2), 1 To 1)<br/>For x = 1 To UBound(arr1)<br/>&nbsp; arr3(x, 1) = arr1(x, 1)<br/>Next x<br/>For i = 1 To UBound(arr1)<br/>&nbsp; For j = 1 To UBound(arr2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If arr2(j, 1) = arr3(i, 1) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr3(i, 1) = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp; Next j<br/>Next i<br/>Range("E2").Resize(x, 1) = arr3<br/>End Sub<br/></p><p>Sub 物2减1()<br/>Dim arr1, arr2, arr3(), i%, j%, k%<br/>arr1 = Range("a2:a11")<br/>arr2 = Range("b2:b11")<br/>Range("F2:F65536").ClearContents<br/>ReDim arr3(1 To UBound(arr1) + UBound(arr2), 1 To 1)<br/>For i = 1 To UBound(arr2)<br/>&nbsp; For j = 1 To UBound(arr1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If arr2(i, 1) = arr1(j, 1) Then GoTo 100<br/>&nbsp; Next j<br/>&nbsp; k = k + 1<br/>&nbsp; arr3(k, 1) = arr2(i, 1)<br/>100:<br/>Next i<br/>Range("F2").Resize(k, 1) = arr3<br/>End Sub</p>
[此贴子已经被作者于2008-1-10 0:53:39编辑过]
回复

使用道具 举报

发表于 2008-1-10 01:01 | 显示全部楼层

<p>Sub 物品1有物品2没有g()<br/>Dim arr1, arr2, arr3(), x%, y%, i1%, i2%, k%<br/>Range("E2:E" &amp; Range("E2").End(xlDown).Row) = ""<br/>arr1 = Range("a2:a11")<br/>arr2 = Range("b2:b11")<br/>i1 = UBound(arr1)<br/>i2 = UBound(arr2)<br/>ReDim arr3(1 To i1 + i2, 1 To 1)<br/>For x = 1 To UBound(arr1)<br/>&nbsp; For y = 1 To UBound(arr2)<br/>&nbsp;&nbsp; If arr1(x, 1) = arr2(y, 1) Then GoTo 100<br/>Next<br/>&nbsp; k = k + 1<br/>&nbsp; arr3(k, 1) = arr1(x, 1)<br/>100:<br/>Next<br/>Range("e2").Resize(k, 1) = arr3<br/>End Sub</p><p><br/>Sub 物品2有物品1没有g()<br/>Dim arr1, arr2, arr3(), x%, y%, i1%, i2%, k%<br/>Range("f2:f" &amp; Range("f2").End(xlDown).Row) = ""<br/>arr1 = Range("a2:a11")<br/>arr2 = Range("b2:b11")<br/>i1 = UBound(arr1)<br/>i2 = UBound(arr2)<br/>ReDim arr3(1 To i1 + i2, 1 To 1)<br/>For y = 1 To UBound(arr2)<br/>&nbsp; For x = 1 To UBound(arr1)<br/>&nbsp;&nbsp; If arr2(y, 1) = arr1(x, 1) Then GoTo 100<br/>Next x<br/>&nbsp; k = k + 1<br/>&nbsp; arr3(k, 1) = arr2(y, 1)<br/>100:<br/>Next y<br/>Range("f2").Resize(k, 1) = arr3<br/>End Sub<br/></p>
回复

使用道具 举报

发表于 2008-1-10 10:33 | 显示全部楼层

<p><font color="#0033ff"><strong>'物品一有二没有</strong></font></p><p>Sub yy1()<br/>&nbsp; Dim d As New Dictionary, x, c, y<br/>&nbsp; c = Range("a2:b11")<br/>&nbsp; y = UBound(c, 1)<br/>&nbsp; Range("e2:e" &amp; y) = ""<br/>&nbsp; For x = 1 To y<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d(c(x, 1)) = ""<br/>&nbsp; Next<br/>&nbsp; For x = 1 To y<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If d.Exists(c(x, 2)) Then d.Remove (c(x, 2))<br/>&nbsp; Next<br/>&nbsp; Range("e2").Resize(d.Count) = Application.Transpose(d.Keys)<br/>End Sub</p><p><br/><font color="#3300ff"><strong>'物品二有一没有</strong></font></p><p>Sub yy2()<br/>&nbsp; Dim d As New Dictionary, x, c, y<br/>&nbsp; c = Range("a2:b11")<br/>&nbsp; y = UBound(c, 1)<br/>&nbsp; Range("f2:f" &amp; y) = ""<br/>&nbsp; For x = 1 To y<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d(c(x, 2)) = ""<br/>&nbsp; Next<br/>&nbsp; For x = 1 To y<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If d.Exists(c(x, 1)) Then d.Remove (c(x, 1))<br/>&nbsp; Next<br/>&nbsp; Range("f2").Resize(d.Count) = Application.Transpose(d.Keys)<br/>End Sub</p>
[此贴子已经被作者于2008-1-10 10:35:49编辑过]
回复

使用道具 举报

发表于 2008-1-10 11:55 | 显示全部楼层

Sub 物品1有物品2没有()<br/>Dim arr1, arr2, arr3()<br/>Dim x, y, z, k<br/>Range("E2:E" &amp; Range("E65536").End(xlUp).Row) = ""<br/>arr1 = Range("A2:A11")<br/>arr2 = Range("B2:B11")<br/>ReDim arr3(1 To UBound(arr1) * UBound(arr2), 1 To 1)<br/>For x = 1 To UBound(arr1)<br/>&#160;&#160; For y = 1 To UBound(arr2)<br/>&#160;&#160; If arr1(x, 1) = arr2(y, 1) Then GoTo 100<br/>&#160;&#160; Next y<br/>&#160;&#160; k = k + 1<br/>&#160;&#160; arr3(k, 1) = arr1(x, 1)<br/>100:<br/>Next x<br/>Range("E2").Resize(k, 1) = arr3<br/>End Sub<br/>Sub 物品2有物品1没有()<br/>Dim arr1, arr2, arr3()<br/>Dim x, y, z, k<br/>Range("F2:F" &amp; Range("E65536").End(xlUp).Row) = ""<br/>arr1 = Range("A2:A11")<br/>arr2 = Range("B2:B11")<br/>ReDim arr3(1 To UBound(arr1) * UBound(arr2), 1 To 1)<br/>For x = 1 To UBound(arr2)<br/>&#160;&#160; For y = 1 To UBound(arr1)<br/>&#160;&#160; If arr1(y, 1) = arr2(x, 1) Then GoTo 100<br/>&#160;&#160; Next y<br/>&#160;&#160; k = k + 1<br/>&#160;&#160; arr3(k, 1) = arr2(x, 1)<br/>100:<br/>Next x<br/>Range("F2").Resize(k, 1) = arr3<br/>End Sub<br/><br/><br/><br/>
[此贴子已经被作者于2008-1-10 21:48:02编辑过]
回复

使用道具 举报

发表于 2008-1-10 12:31 | 显示全部楼层

<p>Sub aaaa2()<br/>Dim arr1, arr2, arr3()<br/>Range("f2:f" &amp; Range("d65536").End(xlUp).Row) = ""<br/>arr1 = Range("a2:a11")<br/>arr2 = Range("b2:b11")<br/>ReDim arr3(1 To UBound(arr1) + UBound(arr2), 1 To 1)<br/>For z = 1 To UBound(arr2)<br/>燜or y = 1 To UBound(arr1)<br/>?If arr2(z, 1) = arr1(y, 1) Then GoTo 100<br/>燦ext y<br/>爇 = k + 1<br/>燼rr3(k, 1) = arr2(z, 1)<br/>100:<br/>燦ext z<br/>燫ange("f2").Resize(k) = arr3<br/>End Sub<br/>Sub aaaa1()<br/>Dim arr1, arr2, arr3()<br/>Range("e2:e" &amp; Range("d65536").End(xlUp).Row) = ""<br/>arr1 = Range("a2:a11")<br/>arr2 = Range("b2:b11")<br/>ReDim arr3(1 To UBound(arr1) + UBound(arr2), 1 To 1)<br/>For z = 1 To UBound(arr1)<br/>燜or y = 1 To UBound(arr2)<br/>?If arr1(z, 1) = arr2(y, 1) Then GoTo 100<br/>燦ext y<br/>爇 = k + 1<br/>燼rr3(k, 1) = arr1(z, 1)<br/>100:<br/>燦ext z<br/>燫ange("e2").Resize(k) = arr3<br/>End Sub</p><p></p>
回复

使用道具 举报

发表于 2008-1-10 12:32 | 显示全部楼层

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

使用道具 举报

发表于 2008-1-10 13:18 | 显示全部楼层

<p>取巧用了字典,具体用字典怎么提取重复值,倒是不太清楚!</p><p>Sub 提取_A不重复值_字典法()<br/>&nbsp;&nbsp;&nbsp; ''此法为取巧,如果不是重复的在最后面,此法不成立!<br/>&nbsp;&nbsp;&nbsp; Dim d As New Dictionary<br/>&nbsp;&nbsp;&nbsp; Dim arr1, arr2, x%, y%<br/>&nbsp;&nbsp;&nbsp; arr1 = Range("a2:a11")<br/>&nbsp;&nbsp;&nbsp; arr2 = Range("b2:b11")<br/>&nbsp;&nbsp;&nbsp; For x = 1 To UBound(arr1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For y = 1 To UBound(arr2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If d.Exists(arr2(y, 1)) Then<br/>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Print arr2(y, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoTo 400<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d(arr1(x, 1)) = ""<br/>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Print arr1(x, 1), arr2(y, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next y<br/>400:<br/>&nbsp;&nbsp;&nbsp; Next x<br/>&nbsp;&nbsp;&nbsp; Range("E2").Resize(d.Count - 1, 1) = Application.Transpose(d.Keys)<br/>End Sub</p><p>Sub 提取_B不重复值_字典法()<br/>&nbsp;&nbsp;&nbsp; ''此法为取巧,如果不是重复的在最前面,此法不成立!<br/>&nbsp;&nbsp;&nbsp; Dim d As New Dictionary<br/>&nbsp;&nbsp;&nbsp; Dim arr1, arr2, x%, y%, k%, arr3<br/>&nbsp;&nbsp;&nbsp; arr1 = Range("a2:a11")<br/>&nbsp;&nbsp;&nbsp; arr2 = Range("b2:b11")<br/>&nbsp;&nbsp;&nbsp; ReDim arr3(1 To UBound(arr2), 1 To 1)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; For x = UBound(arr2) To 1 Step -1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For y = UBound(arr1) To 1 Step -1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If d.Exists(arr1(y, 1)) Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Print arr1(y, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoTo 400<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = k + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr3(k, 1) = arr2(x, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d(arr3(k, 1)) = ""<br/>'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Print k, arr3(k, 1), arr2(x, 1), arr1(y, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoTo 400<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next y<br/>400:<br/>&nbsp;&nbsp;&nbsp; Next x<br/>&nbsp;&nbsp;&nbsp; Range("F2").Resize(d.Count - 1, 1) = Application.Transpose(d.Keys)<br/>&nbsp;&nbsp;&nbsp; ''升序排列<br/>&nbsp;&nbsp;&nbsp; Range("F2:F7").Sort Key1:=Range("F2"), Order1:=xlAscending, Header:=xlNo, _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :=xlPinYin, DataOption1:=xlSortNormal<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub<br/></p>
回复

使用道具 举报

发表于 2008-1-10 13:24 | 显示全部楼层

<p>原来至尊宝_98_76做了。</p><p>&nbsp; Dim d As New Dictionary, x, c, y</p><p>是不是能够一次可以申明几个字典呀?<br/></p>
回复

使用道具 举报

发表于 2008-1-10 14:36 | 显示全部楼层

后面二题只要前面的赋值改一下就行

Sub 唯一1()<br/>Dim arr1, arr2, x%<br/>Range("D2:D20").ClearContents<br/>Dim d As New Dictionary<br/>arr1 = Range("A2:a11").Value<br/>arr2 = Range("B2:b11").Value<br/>For x = 1 To UBound(arr1)<br/>&nbsp;d(arr1(x, 1)) = ""<br/>&nbsp;d(arr2(x, 1)) = ""<br/>Next x<br/>&nbsp;Range("d2").Resize(d.Count) = Application.Transpose(d.keys)<br/>&nbsp;<br/>Set d = Nothing<br/>End Sub<br/>Sub 一有二无1()<br/>Range("E2:E20").ClearContents<br/>Dim arr1, arr2, k%, l%, arr3(1 To 10, 1 To 1)<br/>Dim d As New Dictionary<br/>arr1 = Range("a2:A11")<br/>arr2 = Range("B2:B11")<br/>For k = LBound(arr1) To UBound(arr1)<br/>&nbsp; d(arr1(k, 1)) = ""<br/>Next k<br/>For l = LBound(arr2) To UBound(arr2)<br/>&nbsp; If d.Exists(arr2(l, 1)) Then<br/>&nbsp;&nbsp;&nbsp; d.Remove (arr2(l, 1))<br/>&nbsp; End If<br/>Next l<br/>Range("E2").Resize(d.Count) = Application.Transpose(d.keys)<br/>Set d = Nothing<br/>End Sub<br/>Sub 二有一无1()<br/>Range("F2:F20").ClearContents<br/>Dim arr1, arr2, k%, l%, arr3(1 To 10, 1 To 1)<br/>Dim d As New Dictionary<br/>arr2 = Range("a2:A11")<br/>arr1 = Range("B2:B11")<br/>For k = LBound(arr1) To UBound(arr1)<br/>&nbsp; d(arr1(k, 1)) = ""<br/>Next k<br/>For l = LBound(arr2) To UBound(arr2)<br/>&nbsp; If d.Exists(arr2(l, 1)) Then<br/>&nbsp;&nbsp;&nbsp; d.Remove (arr2(l, 1))<br/>&nbsp;&nbsp; End If<br/>Next l<br/>Range("F2").Resize(d.Count) = Application.Transpose(d.keys)<br/>Set d = Nothing<br/>End Sub<br/>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-26 09:12 , Processed in 0.133000 second(s), 3 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表