dtxczjzmp 发表于 2011-12-20 00:21

Sub dtxczjzmp()
    Dim ar, arr(1 To 1000, 1 To 1)
    i = Range("a65536").End(xlUp).Row
    ar = Range("a1:a" & i)
    For x = 1 To UBound(ar)
      arr(ar(x, 1), 1) = ar(x, 1)
    Next
    Range("c1").Resize(UBound(arr)) = arr
End Sub

9lee 发表于 2011-12-20 08:37

再重做:Sub aa9lee()
Dim arr, brr(1 To 1000), crr(1 To 1000, 1 To 1), i As Long
arr = Range("a1").CurrentRegion
For i = 1 To UBound(arr)
   If IsEmpty(brr(arr(i, 1))) Then
      brr(arr(i, 1)) = arr(i, 1)
      x = x + 1
      crr(x, 1) = arr(i, 1)
   End If
Next
.Resize(x) = crr
End Sub

EP学员 发表于 2011-12-21 03:22

本帖最后由 EP学员 于 2011-12-21 03:23 编辑

交作业2

Sub EP学员()
    Dim arr1(), arr2(1 To 1000), arr3()
    Dim i As Integer, k As Integer
    arr1 = Range(, Cells(.End(xlUp).Row, 1))
    For i = 1 To UBound(arr1)
      If arr2(arr1(i, 1)) = "" Then'不为空即为重复
            arr2(arr1(i, 1)) = arr1(i, 1)
            k = k + 1
            ReDim Preserve arr3(1 To 1, 1 To k)
            arr3(1, k) = arr1(i, 1)
      End If
    Next
    Range("C1").Resize(k, 1) = Application.Transpose(arr3)
    Stop
End Sub

ldxhzy 发表于 2011-12-21 11:08

Private Sub ldxhzy()
    Dim Sou(), Tmp(1 To 1000), Tag()
    Dim I As Long, J As Long
    I = UsedRange.Rows.Count
    J = 0
    ReDim Sou(1 To I, 1 To 1)
    Sou = Range(Cells(1, 1), Cells(I, 1))
    For I = 1 To UsedRange.Rows.Count
      If IsEmpty(Tmp(Sou(I, 1))) Then
            J = J + 1
            ReDim Preserve Tag(1 To 1, 1 To J)
            Tmp(Sou(I, 1)) = Sou(I, 1)
            Tag(1, J) = Sou(I, 1)
      End If
    Next I
    I = UBound(Tag, 2)
    Range(Cells(1, 3), Cells(I, 3)) = Application.Transpose(Tag)
End Sub

我不知道呀 发表于 2011-12-21 21:12

Sub 我不知道呀()
    On Error Resume Next
    Dim Only As New Collection
    Dim arr, Arr2()
    arr = Range(, .End(xlUp)).Value
    For i = 1 To UBound(arr) Step 1
      Only.Add arr(i, 1), CStr(arr(i, 1))
      If Err = 0 Then
            j = j + 1
            ReDim Preserve Arr2(1 To 1, 1 To j)
            Arr2(1, j) = Only(j)
      End If
      Err.Clear
    Next
    .Resize(j, 1) = WorksheetFunction.Transpose(Arr2)
   
End Sub

wcymiss 发表于 2011-12-21 22:44

本帖最后由 wcymiss 于 2011-12-21 23:21 编辑

      本道题思路比较狭窄,因为也是考知识点。
      知识点:数组下标是唯一的。当字典的key值是整数时,可以用数组下标代替字典来处理数据。
      这个可能平常用的不多,因为一遇到去重问题,直接想到的是字典了。这个其实和字典的基本原理很相近了,练习本题的目的,就是为下节字典课做准备,待学了字典后,大家可以比较一下数组去重和字典去重各自的优劣。
      
      本题除了用数组下标去重,还可以用instr、fliter、like等文本处理函数(运算符)的方法来去重。但vba处理文本速度较慢。
      好像想不出什么可写的了,以后想到什么再添加吧。:lol :lol

ls 发表于 2011-12-22 00:18

Benol 发表于 2011-12-17 19:25 static/image/common/back.gif


intArr(src(i, 1)) = 1



徐淑颖 发表于 2011-12-22 09:49

不会做的学习来了!{:091:}

jiangslly 发表于 2011-12-23 12:35

Private Sub quchuchongfushuj()
On Error Resume Next
Dim a, b, c, r
    Dim arr2, arr1(), arr3
   r = Sheet1..End(xlUp).Row
    Dim cen As New Collection
    arr2 = Sheet1.Range("a1:a" & r)
arr3 = Application.WorksheetFunction.Transpose(arr2)
   For a = 1 To UBound(arr3)
   cen.Add arr3(a), CStr(arr3(a))
   Next
For a = 1 To cen.Count
      ReDim Preserve arr1(1 To a)
   arr1(a) = cen(a)
   Next a
Range("b1:b" & UBound(arr1)) = Application.WorksheetFunction.Transpose(arr1())
End Sub

wjc2090742 发表于 2011-12-23 14:25

4、18楼的方法非常巧妙啊。学习了。

每次循环中用fliter应该挺慢的,然后like比instr快很多。
页: 1 2 [3] 4
查看完整版本: 【字典与数组二期1班】第一讲作业数组去重(选做)【已开贴】