楼主 Zaezhong |
亲,如果看到好的回复就整理下呗,只为在庞大的帖海收集一些有用的资源 收藏专用,如果有更好的方法也欢迎跟帖。如果跟帖请回复具体楼层,谢谢配合~ |
2楼 Zaezhong |
- Sub 使用不同色标记重复()
- Dim arr, i&, j As Byte, 颜色 As Byte, d As Object, K, T, Tem
- Set d = CreateObject("scripting.dictionary")
- Cells.Interior.ColorIndex = xlNone
- arr = [A1].CurrentRegion
- For i = 1 To UBound(arr)
- For j = 1 To 8
- If Len(arr(i, j)) Then
- d(arr(i, j)) = d(arr(i, j)) & i & "," & j & "|"
- End If
- Next
- Next
- K = d.keys: T = d.items
- 颜色 = 2
- For i = 0 To UBound(K)
- T(i) = Left(T(i), Len(T(i)) - 1)
- If InStr(T(i), "|") Then
- Tem = Split(T(i), "|")
- 颜色 = 颜色 + 1
- If 颜色 > 50 Then 颜色 = 3
- For j = 0 To UBound(Tem)
- Cells(Split(Tem(j), ",")(0) + 0, Split(Tem(j), ",")(1) + 0).Interior.ColorIndex = 颜色
- Next
- End If
- Next
- Set d = Nothing
- End Sub
使用不同色标记重复.zip |
3楼 Zaezhong |
- Public Arr() As Double, ArrNo(), Ncount&, Bln As Boolean, ArrJG(), BlnArr() As Boolean, JGCount&
- Sub FindNumber()
- Dim Obj As Double, ArrTemp(), RowN&, i&, j&, k&
- With Sheet1
- RowN = .Cells(.Cells.Rows.Count, "B").End(xlUp).Row
- .Range("A3:B" & RowN).Sort key1:=Range("B3"), Order1:=xlDescending, header:=xlNo
- ArrTemp = .Range("B3:B" & RowN)
- ArrNo = WorksheetFunction.Transpose(.Range("A3:A" & RowN))
- .Range("A3:B" & RowN).Sort key1:=Range("A3"), Order1:=xlAscending, header:=xlNo
- Obj = .Range("B1")
- End With
- Ncount = UBound(ArrTemp)
- ReDim BlnArr(1 To Ncount)
- ReDim Arr(1 To Ncount)
- For i = 1 To Ncount
- Arr(i) = ArrTemp(i, 1)
- Next i
- For i = 1 To Ncount
- If Arr(i) <= Obj Then Exit For
- Next i
- If i > Ncount Then
- MsgBox "组合生成失败"
- Exit Sub
- End If
- JGCount = 0
- Call GetN(Obj, i)
- If JGCount > 0 Then
- With Sheet2
- .Cells.Clear
- For i = 1 To JGCount
- k = 0
- ReDim ArrTemp(0)
- ArrTemp(0) = "第" & i & "组解"
- For j = 1 To UBound(ArrJG(i))
- If ArrJG(i)(j) Then
- k = k + 1
- ReDim Preserve ArrTemp(0 To k)
- ArrTemp(k) = Arr(j)
- End If
- Next j
- .Range(.Cells(i, 1), .Cells(i, k + 1)) = ArrTemp
- Next i
- .UsedRange.Columns.AutoFit
- .Select
- End With
- Else
- MsgBox "组合生成失败"
- End If
- End Sub
- Sub GetN(ByVal Obj As Double, ByVal M As Long)
- Dim i As Long
- Dim ObjTemp As Double
- BlnArr(M) = True
- ObjTemp = Obj - Arr(M)
- If ObjTemp = 0 Then
- JGCount = JGCount + 1
- ReDim Preserve ArrJG(1 To JGCount)
- ArrJG(JGCount) = BlnArr
- Else
- If M = Ncount Then
- BlnArr(M) = False
- Exit Sub
- Else
- For i = M + 1 To Ncount
- If Arr(i) <= ObjTemp Then
- Call GetN(ObjTemp, i)
- Exit For
- End If
- Next i
- End If
- End If
- BlnArr(M) = False
- If M = Ncount Then Exit Sub
- Call GetN(Obj, M + 1)
- End Sub
已知总和的多个数字组合VBA方法.zip |
4楼 Zaezhong |
根据平均数生成随机数.zip |
5楼 Zaezhong |
B5单元格- =ROUND(MAX($H$5*0.7,$B$35-SUM($B$4:$B4)-(31-ROW(2:2))*$H$5*1.3)+(MIN($H$5*1.3,$B$35-SUM($B$4:$B4)-(31-ROW(2:2))*$H$5*0.7)-MAX($H$5*0.7,$B$35-SUM($B$4:$B4)-(31-ROW(2:2))*$H$5*1.3))*RAND(),2)
随机分配.zip |
6楼 Zaezhong |
字典嵌套- Sub 罗列校长()
- Dim arr, i%, j%, d As Object, K, key, T, Rst()
- Set d = CreateObject("scripting.dictionary")
- arr = [A1].CurrentRegion
- For i = 2 To UBound(arr)
- For j = 2 To UBound(arr, 2)
- If arr(i, j) <> "" Then
- If Not d.exists(arr(i, j)) Then Set d(arr(i, j)) = CreateObject("scripting.dictionary")
- d(arr(i, j))(arr(i, 1)) = ""
- End If
- Next
- Next
- K = d.keys
- ReDim Rst(UBound(K), 1 To UBound(arr))
- For i = 0 To UBound(K)
- key = d(K(i)).keys
- Rst(i, 1) = K(i)
- For j = 0 To UBound(key)
- Rst(i, j + 2) = key(j)
- Next
- Next
- [A7].Resize(UBound(K) + 1, UBound(Rst, 2)) = Rst
- End Sub
- Sub 结果()
- Dim arr, d As Object, i&, j&, S, T
- arr = [A1].CurrentRegion
- Set d = CreateObject("Scripting.Dictionary")
- For i = 2 To UBound(arr)
- For j = 2 To UBound(arr, 2)
- If arr(i, j) <> "" Then
- T = d(arr(i, j))
- If T = "" Then
- d(arr(i, j)) = arr(i, 1)
- Else
- If InStr(";" & T, ";" & arr(i, 1)) = 0 Then d(arr(i, j)) = d(arr(i, j)) & ";" & arr(i, 1)
- End If
- End If
- Next
- Next
- Range([A8], Cells(Rows.Count, 6)).Clear
- [A8].Resize(d.Count) = Application.Transpose(d.keys)
- T = d.items
- For i = 0 To d.Count - 1
- S = Split(T(i), ";")
- [B8].Offset(i).Resize(1, UBound(S) + 1) = S
- Next
- End Sub
- Sub Kevinchengcw()
- Dim Dic As Object, Dic2 As Object, arr, Arrt, N&, i&, T%, Str$
- Set Dic = CreateObject("scripting.dictionary")
- Set Dic2 = CreateObject("scripting.dictionary")
- arr = [A1].CurrentRegion.Value
- T = 1
- For N = LBound(arr) + 1 To UBound(arr)
- For i = LBound(arr, 2) + 1 To UBound(arr, 2)
- If arr(N, i) <> "" Then
- Str = arr(N, 1) & vbTab & arr(N, i)
- If Not Dic2.exists(Str) Then
- If Dic.exists(arr(N, i)) Then
- Arrt = Dic(arr(N, i))
- ReDim Preserve Arrt(1 To UBound(Arrt) + 1)
- If UBound(Arrt) > T Then T = UBound(Arrt)
- Arrt(UBound(Arrt)) = arr(N, 1)
- Dic(arr(N, i)) = Arrt
- Else
- ReDim Arrt(1 To 1)
- Arrt(1) = arr(N, 1)
- Dic(arr(N, i)) = Arrt
- End If
- Dic2(Str) = ""
- End If
- End If
- Next i
- Next N
- Arrt = Dic.keys
- ReDim arr(1 To Dic.Count, 1 To T + 1)
- For N = LBound(Arrt) To UBound(Arrt)
- arr(N + 1, 1) = Arrt(N)
- For i = LBound(Dic(Arrt(N))) To UBound(Dic(Arrt(N)))
- arr(N + 1, i + 1) = Dic(Arrt(N))(i)
- Next i
- Next N
- [A8].Resize(UBound(arr), UBound(arr, 2)) = arr
- Set Dic = Nothing: Set Dic2 = Nothing
- End Sub
按照学校罗列校长.zip |
7楼 Zaezhong |
- Function CONNECTIF(rng1 As Range, criteria As Range, rng2 As Range, Optional deli As String = " ")
- Application.Volatile
- Dim i&, arr1, arr2, Str$
- arr1 = Intersect(rng1, rng1.Parent.UsedRange).Value
- arr2 = Intersect(rng2, rng2.Parent.UsedRange).Value
- For i = 1 To UBound(arr1)
- If CStr(arr1(i, 1)) = criteria(1).Text Then Str = Str & arr2(i, 1) & deli
- Next
- CONNECTIF = Left$(Str, Len(Str) - 1)
- End Function
如何将相同项目的编号进行串联并使用特点字符分隔? http://www.exceltip.net/thread-37552-1-1.html 连接文本.zip |
8楼 Zaezhong |
- =RIGHT(0&SUM(LARGE(RIGHT(LARGE((MATCH(MID(A2,16-ROW($1:$15),1),MID(A2,16-ROW($1:$15),1),)=ROW($1:$15))*(MID(A2,16-ROW($1:$15),1)<>"")*((16-ROW($1:$15))&MID(A2,16-ROW($1:$15),1)),ROW($1:$5)))+0,ROW($1:$5))*10^ROW($2:$6))%,MIN(COUNT(FIND(ROW($1:$10)-1,A2)),5))
- =RIGHT(0&SUM(((LARGE(MID(1/17&A2,31-SMALL(TEXT(MATCH(ROW($1:$10)-1,MID(1/17&A2,31-ROW($1:$30),1)+0,),"[>"&30-LEN(1/17)&"]3\0;0")+0,ROW($1:$5)),1)+0,ROW($1:$5)))*10^ROW($2:$6))%),MIN(COUNT(FIND(ROW($1:$10)-1,A2)),5))
- =RIGHT(SUM(SMALL(MID(REPT(0,18)&A2,41-SMALL(MATCH(1-ROW($1:$10),-MID(1/17&A2,41-ROW($1:$40),1),),ROW($1:$5)),1)+0,ROW($1:$5))/10^ROW($1:$5)),MIN(COUNT(FIND(ROW($1:$10)-1,A2)),5))
相关参考:随心所欲玩转数字问题 http://www.exceltip.net/thread-23908-1-1.html |
9楼 Zaezhong |
- Sub 连续个数()
- Dim arr, N, i&, j&
- arr = Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row)
- N = vbNull
- For i = LBound(arr) To UBound(arr)
- If j <> arr(i, 1) Then
- If N > 0 Then arr(N, 2) = i - N
- j = arr(i, 1)
- N = i
- End If
- Next
- arr(N, 2) = i - N
- Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row) = arr
- End Sub
|
10楼 山里人 |
- Sub kevinchengcw()
- Dim Str$, Match
- Str = "aa文字b汉字com中文a你好"
- With CreateObject("vbscript.regexp")
- .Global = True
- .Pattern = "[^a\u4e00-\u9fa5]+?([\u4e00-\u9fa5]+)"
- If .test(Str) Then
- For Each Match In .Execute(Str)
- Debug.Print Match.submatches(0)
- Next Match
- End If
- End With
- End Sub
http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=908026&pid=6224475 |
11楼 Zaezhong |
亲,如果看到好的回复就整理下呗,只为在庞大的帖海收集一些有用的资源 收藏专用,如果有更好的方法也欢迎跟帖。如果跟帖请回复具体楼层,谢谢配合~ |
12楼 Zaezhong |
- Sub 使用不同色标记重复()
- Dim arr, i&, j As Byte, 颜色 As Byte, d As Object, K, T, Tem
- Set d = CreateObject("scripting.dictionary")
- Cells.Interior.ColorIndex = xlNone
- arr = [A1].CurrentRegion
- For i = 1 To UBound(arr)
- For j = 1 To 8
- If Len(arr(i, j)) Then
- d(arr(i, j)) = d(arr(i, j)) & i & "," & j & "|"
- End If
- Next
- Next
- K = d.keys: T = d.items
- 颜色 = 2
- For i = 0 To UBound(K)
- T(i) = Left(T(i), Len(T(i)) - 1)
- If InStr(T(i), "|") Then
- Tem = Split(T(i), "|")
- 颜色 = 颜色 + 1
- If 颜色 > 50 Then 颜色 = 3
- For j = 0 To UBound(Tem)
- Cells(Split(Tem(j), ",")(0) + 0, Split(Tem(j), ",")(1) + 0).Interior.ColorIndex = 颜色
- Next
- End If
- Next
- Set d = Nothing
- End Sub
使用不同色标记重复.zip |
13楼 Zaezhong |
- Public Arr() As Double, ArrNo(), Ncount&, Bln As Boolean, ArrJG(), BlnArr() As Boolean, JGCount&
- Sub FindNumber()
- Dim Obj As Double, ArrTemp(), RowN&, i&, j&, k&
- With Sheet1
- RowN = .Cells(.Cells.Rows.Count, "B").End(xlUp).Row
- .Range("A3:B" & RowN).Sort key1:=Range("B3"), Order1:=xlDescending, header:=xlNo
- ArrTemp = .Range("B3:B" & RowN)
- ArrNo = WorksheetFunction.Transpose(.Range("A3:A" & RowN))
- .Range("A3:B" & RowN).Sort key1:=Range("A3"), Order1:=xlAscending, header:=xlNo
- Obj = .Range("B1")
- End With
- Ncount = UBound(ArrTemp)
- ReDim BlnArr(1 To Ncount)
- ReDim Arr(1 To Ncount)
- For i = 1 To Ncount
- Arr(i) = ArrTemp(i, 1)
- Next i
- For i = 1 To Ncount
- If Arr(i) <= Obj Then Exit For
- Next i
- If i > Ncount Then
- MsgBox "组合生成失败"
- Exit Sub
- End If
- JGCount = 0
- Call GetN(Obj, i)
- If JGCount > 0 Then
- With Sheet2
- .Cells.Clear
- For i = 1 To JGCount
- k = 0
- ReDim ArrTemp(0)
- ArrTemp(0) = "第" & i & "组解"
- For j = 1 To UBound(ArrJG(i))
- If ArrJG(i)(j) Then
- k = k + 1
- ReDim Preserve ArrTemp(0 To k)
- ArrTemp(k) = Arr(j)
- End If
- Next j
- .Range(.Cells(i, 1), .Cells(i, k + 1)) = ArrTemp
- Next i
- .UsedRange.Columns.AutoFit
- .Select
- End With
- Else
- MsgBox "组合生成失败"
- End If
- End Sub
- Sub GetN(ByVal Obj As Double, ByVal M As Long)
- Dim i As Long
- Dim ObjTemp As Double
- BlnArr(M) = True
- ObjTemp = Obj - Arr(M)
- If ObjTemp = 0 Then
- JGCount = JGCount + 1
- ReDim Preserve ArrJG(1 To JGCount)
- ArrJG(JGCount) = BlnArr
- Else
- If M = Ncount Then
- BlnArr(M) = False
- Exit Sub
- Else
- For i = M + 1 To Ncount
- If Arr(i) <= ObjTemp Then
- Call GetN(ObjTemp, i)
- Exit For
- End If
- Next i
- End If
- End If
- BlnArr(M) = False
- If M = Ncount Then Exit Sub
- Call GetN(Obj, M + 1)
- End Sub
已知总和的多个数字组合VBA方法.zip |
14楼 Zaezhong |
根据平均数生成随机数.zip |
15楼 Zaezhong |
B5单元格- =ROUND(MAX($H$5*0.7,$B$35-SUM($B$4:$B4)-(31-ROW(2:2))*$H$5*1.3)+(MIN($H$5*1.3,$B$35-SUM($B$4:$B4)-(31-ROW(2:2))*$H$5*0.7)-MAX($H$5*0.7,$B$35-SUM($B$4:$B4)-(31-ROW(2:2))*$H$5*1.3))*RAND(),2)
随机分配.zip |
16楼 Zaezhong |
字典嵌套- Sub 罗列校长()
- Dim arr, i%, j%, d As Object, K, key, T, Rst()
- Set d = CreateObject("scripting.dictionary")
- arr = [A1].CurrentRegion
- For i = 2 To UBound(arr)
- For j = 2 To UBound(arr, 2)
- If arr(i, j) <> "" Then
- If Not d.exists(arr(i, j)) Then Set d(arr(i, j)) = CreateObject("scripting.dictionary")
- d(arr(i, j))(arr(i, 1)) = ""
- End If
- Next
- Next
- K = d.keys
- ReDim Rst(UBound(K), 1 To UBound(arr))
- For i = 0 To UBound(K)
- key = d(K(i)).keys
- Rst(i, 1) = K(i)
- For j = 0 To UBound(key)
- Rst(i, j + 2) = key(j)
- Next
- Next
- [A7].Resize(UBound(K) + 1, UBound(Rst, 2)) = Rst
- End Sub
- Sub 结果()
- Dim arr, d As Object, i&, j&, S, T
- arr = [A1].CurrentRegion
- Set d = CreateObject("Scripting.Dictionary")
- For i = 2 To UBound(arr)
- For j = 2 To UBound(arr, 2)
- If arr(i, j) <> "" Then
- T = d(arr(i, j))
- If T = "" Then
- d(arr(i, j)) = arr(i, 1)
- Else
- If InStr(";" & T, ";" & arr(i, 1)) = 0 Then d(arr(i, j)) = d(arr(i, j)) & ";" & arr(i, 1)
- End If
- End If
- Next
- Next
- Range([A8], Cells(Rows.Count, 6)).Clear
- [A8].Resize(d.Count) = Application.Transpose(d.keys)
- T = d.items
- For i = 0 To d.Count - 1
- S = Split(T(i), ";")
- [B8].Offset(i).Resize(1, UBound(S) + 1) = S
- Next
- End Sub
- Sub Kevinchengcw()
- Dim Dic As Object, Dic2 As Object, arr, Arrt, N&, i&, T%, Str$
- Set Dic = CreateObject("scripting.dictionary")
- Set Dic2 = CreateObject("scripting.dictionary")
- arr = [A1].CurrentRegion.Value
- T = 1
- For N = LBound(arr) + 1 To UBound(arr)
- For i = LBound(arr, 2) + 1 To UBound(arr, 2)
- If arr(N, i) <> "" Then
- Str = arr(N, 1) & vbTab & arr(N, i)
- If Not Dic2.exists(Str) Then
- If Dic.exists(arr(N, i)) Then
- Arrt = Dic(arr(N, i))
- ReDim Preserve Arrt(1 To UBound(Arrt) + 1)
- If UBound(Arrt) > T Then T = UBound(Arrt)
- Arrt(UBound(Arrt)) = arr(N, 1)
- Dic(arr(N, i)) = Arrt
- Else
- ReDim Arrt(1 To 1)
- Arrt(1) = arr(N, 1)
- Dic(arr(N, i)) = Arrt
- End If
- Dic2(Str) = ""
- End If
- End If
- Next i
- Next N
- Arrt = Dic.keys
- ReDim arr(1 To Dic.Count, 1 To T + 1)
- For N = LBound(Arrt) To UBound(Arrt)
- arr(N + 1, 1) = Arrt(N)
- For i = LBound(Dic(Arrt(N))) To UBound(Dic(Arrt(N)))
- arr(N + 1, i + 1) = Dic(Arrt(N))(i)
- Next i
- Next N
- [A8].Resize(UBound(arr), UBound(arr, 2)) = arr
- Set Dic = Nothing: Set Dic2 = Nothing
- End Sub
按照学校罗列校长.zip |
17楼 Zaezhong |
- Function CONNECTIF(rng1 As Range, criteria As Range, rng2 As Range, Optional deli As String = " ")
- Application.Volatile
- Dim i&, arr1, arr2, Str$
- arr1 = Intersect(rng1, rng1.Parent.UsedRange).Value
- arr2 = Intersect(rng2, rng2.Parent.UsedRange).Value
- For i = 1 To UBound(arr1)
- If CStr(arr1(i, 1)) = criteria(1).Text Then Str = Str & arr2(i, 1) & deli
- Next
- CONNECTIF = Left$(Str, Len(Str) - 1)
- End Function
如何将相同项目的编号进行串联并使用特点字符分隔? http://www.exceltip.net/thread-37552-1-1.html 连接文本.zip |
18楼 Zaezhong |
- =RIGHT(0&SUM(LARGE(RIGHT(LARGE((MATCH(MID(A2,16-ROW($1:$15),1),MID(A2,16-ROW($1:$15),1),)=ROW($1:$15))*(MID(A2,16-ROW($1:$15),1)<>"")*((16-ROW($1:$15))&MID(A2,16-ROW($1:$15),1)),ROW($1:$5)))+0,ROW($1:$5))*10^ROW($2:$6))%,MIN(COUNT(FIND(ROW($1:$10)-1,A2)),5))
- =RIGHT(0&SUM(((LARGE(MID(1/17&A2,31-SMALL(TEXT(MATCH(ROW($1:$10)-1,MID(1/17&A2,31-ROW($1:$30),1)+0,),"[>"&30-LEN(1/17)&"]3\0;0")+0,ROW($1:$5)),1)+0,ROW($1:$5)))*10^ROW($2:$6))%),MIN(COUNT(FIND(ROW($1:$10)-1,A2)),5))
- =RIGHT(SUM(SMALL(MID(REPT(0,18)&A2,41-SMALL(MATCH(1-ROW($1:$10),-MID(1/17&A2,41-ROW($1:$40),1),),ROW($1:$5)),1)+0,ROW($1:$5))/10^ROW($1:$5)),MIN(COUNT(FIND(ROW($1:$10)-1,A2)),5))
相关参考:随心所欲玩转数字问题 http://www.exceltip.net/thread-23908-1-1.html |
19楼 山里人 |
- Sub kevinchengcw()
- Dim Str$, Match
- Str = "aa文字b汉字com中文a你好"
- With CreateObject("vbscript.regexp")
- .Global = True
- .Pattern = "[^a\u4e00-\u9fa5]+?([\u4e00-\u9fa5]+)"
- If .test(Str) Then
- For Each Match In .Execute(Str)
- Debug.Print Match.submatches(0)
- Next Match
- End If
- End With
- End Sub
http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=908026&pid=6224475 |
20楼 Zaezhong |
- Sub 连续个数()
- Dim arr, N, i&, j&
- arr = Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row)
- N = vbNull
- For i = LBound(arr) To UBound(arr)
- If j <> arr(i, 1) Then
- If N > 0 Then arr(N, 2) = i - N
- j = arr(i, 1)
- N = i
- End If
- Next
- arr(N, 2) = i - N
- Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row) = arr
- End Sub
|