這是一個朋友寫的,分享給大家。
借用WorksheetFunction.Small 或 WorksheetFunction.Large來排序字串 & 數值 --
Sub Sort_Array() Dim SrcWord()
N = Len([B3].Value): ReDim SrcWord(N)
For i = 1 To N
SrcWord(i) = CLng("&H" & Hex(AscW(Mid([B3], i, 1))))
'非常非常非常重要的一件事:
'上面的 CLng("&H" & Hex....) 看似多此一舉,卻是絕對必要的。
'因為,有些字的Unicode已超過32,767;若用Val來轉的話會出錯;
'連帶使下面排列大小的結果也跟著出錯。 Next
For i = 1 To N
KAns = KAns & ChrW(WorksheetFunction.Small(SrcWord, i))
Next
MsgBox KAns
End Sub
Function Sort_by_Unicode(SrcCell As Range) '照Unicode排序 Dim SrcWord()
N = Len(SrcCell.Value): ReDim SrcWord(N)
For i = 1 To N
SrcWord(i) = CLng("&H" & Hex(AscW(Mid(SrcCell, i, 1))))
Next
For i = 1 To N
Sort_by_Unicode = Sort_by_Unicode & _
ChrW(WorksheetFunction.Small(SrcWord, i))
Next
End Function
Function Sort_by_Big5(SrcCell As Range) '照BIG-5碼排序 Dim SrcWord()
N = Len(SrcCell.Value): ReDim SrcWord(N)
For i = 1 To N
SrcWord(i) = Asc(Mid(SrcCell, i, 1))
Next
For i = 1 To N
Sort_by_Big5 = Sort_by_Big5 & _
Chr(WorksheetFunction.Small(SrcWord, i))
Next
End Function
另發現有人寫好的bas (mdlArray.bas, 如附件) 內容很豐富...
可直接應用其提供的程序也蠻好用的, 例 --
| (1) ShellSortAny | ' Sorts the array. |
| (2) ShellSortLong | ' Sorts the long array. |
| (3) ShellSortString | ' Sorts the string array. |
但如果是數值在Excel VBA的話, 其實WorksheetFunction.Small 還是很好用的.
[附件已被管理員刪除]