3.5,數組的排序
字符串數組不能用Large(Arr,i) 或者 Small(Arr,i) 來排序;
但數值數組可以;
一個很好的字典+數組排序的實例:
Sub yy1()
‘by:oobird
Dim i%, c As Range, x, d As Object
Set d = CreateObject("Scripting.Dictionary")
For Each c In Sheet2.UsedRange
If c.Value <> "" Then
If Not d.exists(c.Value) Then
d.Add c.Value, 1
Else
d(c.Value) = d(c.Value) + 1
End If
End If
Next
k = d.keys: t = d.items 'k是各個不重復值,t是各個不重復值的個數
ReDim x(1 To 2, 1 To d.Count)
For i = 1 To d.Count
x(2, i) = application.Large(k, i) ‘從大到小排序
x(1, i) = d(x(2, i))
Next i
With Sheet1
.[b2].Resize(2, i - 1) = x
ReDim x(1 To 2, 1 To d.Count)
For i = 1 To d.Count
x(1, i) = Application.Max(t) ‘從大到小排序
w = Application.Match(x(1, i), t, 0) – 1 ‘查找此值在不重復值系列中的排位,因為w是從0開始的,所以-1
x(2, i) = k(w) ‘求得對應的不重復值
t(w) = "" ‘使前面的最大值為空,繼續循環
Next i
.[b5].Resize(2, i - 1) = x ‘兩行一起賦值給B5開始的單元格
End With
End Sub
字符串數組的排序,可以使用輔助列,把數組各元素依次賦給單元格,然后對這些單元格運用Excel自有的數據排序功能進行排序,再把單元格排過序的值重新賦給數組。
3.6,數組賦給單元格區域
r=Ubound(Arr) r為一維數組的上限;
Range("a2").Resize(1, r) = Arr '填充到工作表的一行之中(Arr為一維數組)
或者寫成 Range("a2").Resize(1, Ubound(Arr)) = Arr
二維數組Arr(100,5)
Range(“a1”).Resize(100,5)=Arr
[a1:e100]=Arr
或者寫成 Range("a1").Resize(Ubound(Arr,1), Ubound(Arr,2)) = Arr
賦值方面的補充:
Sub y()
Dim arr
arr = [mmult(row(1:100),column(a:f))]
[a1].Resize(100, 6) = arr
End Sub
Sub yy()
Dim arr
arr = [column(a:z)^3]
MsgBox Join(arr, ",")
arr = [transpose(row(1:222))]
MsgBox Join(arr, ",")
End Sub
Sub yyy()
Dim arr
arr = Split("a b c d e f g")
MsgBox Join(arr, ",")
End Sub
新聞熱點
疑難解答