|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
- Sub test0() '凭个人兴趣,纯练习,仅测试,无它,若要换写法,不回……
- Dim i As Long, j As Long
- Dim ar, br() As String, cr(4), dict As Object
- Dim Conn As Object, strConn As String, SQL As String
-
- ar = Range("A1").Resize(5)
- ReDim br(1 To UBound(ar), 1 To Len(ar(1, 1)))
- For i = 1 To UBound(ar)
- For j = 1 To Len(ar(i, 1))
- br(j, i) = Mid(ar(i, 1), j, 1)
- Next
- Next
- Range("B1").Resize(i - 1, j - 1) = br
-
- Set Conn = CreateObject("ADODB.Connection")
- strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=NO';Data Source="
- Conn.Open strConn & ThisWorkbook.FullName
-
- SQL = "SELECT b.*,c.*,d.*,e.*,f.* FROM [$F1:F5] f,[$E1:E5] e,[$D1:D5] d,[$C1:C5] c,[$B1:B5] b"
- ar = Conn.Execute(SQL).GetRows
- Conn.Close
- Set Conn = Nothing
-
- ReDim br(UBound(ar, 2))
- Set dict = CreateObject("Scripting.Dictionary")
- For j = 0 To UBound(ar, 2)
- For i = 0 To UBound(ar)
- cr(i) = ar(i, j)
- Next
- br(j) = Join(cr, "")
- QuickSort cr, LBound(cr), UBound(cr)
- If Not dict.Exists(Join(cr, "")) Then dict.Add Join(cr, ""), ""
- Next
-
- Range("A1").CurrentRegion.Offset(, 1).ClearContents
- Range("A7") = Join(br, vbCrLf)
- Range("A8") = Join(dict.Keys, vbCrLf)
-
- Set dict = Nothing
- Beep
- End Sub
- Function QuickSort(ar, l As Long, u As Long)
- Dim i As Long, j As Long, pivot As Long, swap As Long
- If l >= u Then Exit Function
- pivot = ar(l)
- i = l + 1
- j = u
- Do
- Do
- If ar(i) > pivot Then Exit Do
- i = i + 1
- Loop While i <= u
- Do
- If ar(j) < pivot Then Exit Do
- j = j - 1
- Loop While j > l
- If i >= j Then Exit Do
- swap = ar(i)
- ar(i) = ar(j)
- ar(j) = swap
- Loop
- If l <> j Then
- swap = ar(l)
- ar(l) = ar(j)
- ar(j) = swap
- End If
- If l < j Then QuickSort ar, l, j
- If j + 1 < u Then QuickSort ar, j + 1, u
- End Function
复制代码 |
评分
-
1
查看全部评分
-
|