Sub NextSeven_CodeFrame4()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Application.StatusBar = ">>>>>>>>程序正在运行>>>>>>>>" On Error GoTo ErrHandler Dim StartTime, UsedTime As Variant
StartTime = VBA.Timer
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Dim Wb As Workbook
Dim Sht As Worksheet
Dim oSht As Worksheet
Dim Rng As Range
Dim Arr As Variant
Dim EndRow As Long
Const HEAD_ROW As Long = 2
Const SHEET_NAME As String = "具体事项"
Const START_COLUMN As String = "A"
Const END_COLUMN As String = "I" Dim Key As String
Dim OneKey Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary") Dim dInfo As Object
Set dInfo = CreateObject("Scripting.Dictionary") Dim dCal As Object '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Set Wb = Application.ThisWorkbook
Set Sht = Wb.Worksheets(SHEET_NAME)
With Sht
EndRow = .Cells(.Cells.Rows.Count, "D").End(xlUp).Row
Debug.Print EndRow
Set Rng = .Range(.Cells(HEAD_ROW + 1, START_COLUMN), .Cells(EndRow, END_COLUMN)) Arr = Rng.Value
For i = LBound(Arr) To UBound(Arr)
If Arr(i, 1) = "" Then Arr(i, 1) = Arr(i - 1, 1)
Key = CStr(Arr(i, 5))
Dic(Key) = Dic(Key) + 1 Key = CStr(Arr(i, 5) & ";" & Arr(i, 1))
dInfo(Key) = dInfo(Key) + 1 Next i
End With '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Set oSht = Wb.Worksheets("协调合作单位分析")
With oSht
.UsedRange.Offset(HEAD_ROW).Clear
N = 0
dicsum = Application.WorksheetFunction.Sum(Dic.items)
For Each ok In Dic.Keys '合作单位是OK
N = N + 1
.Cells(N + HEAD_ROW, "A").Value = N
.Cells(N + HEAD_ROW, "B").Value = ok
.Cells(N + HEAD_ROW, "C").Value = Dic(ok)
.Cells(N + HEAD_ROW, "D").Value = Format(Dic(ok) / dicsum, "#0.00%") Set dCal = CreateObject("Scripting.Dictionary") For Each pk In dInfo.Keys
pos = InStr(1, pk, ok)
If pos > 0 Then
pos = InStr(1, pk, ";")
nk = Mid(pk, pos + 1) '区域
'Debug.Print nk
'区域及对应数量
dCal(nk) = dInfo(pk)
End If
Next pk iMax = Application.WorksheetFunction.Max(dCal.items)
info = "" For x = iMax To 1 Step -1
For Each nk In dCal.Keys '区域
If dCal(nk) = x Then
info = info & nk
info = info & x
info = info & ";"
End If
Next nk
Next x
.Cells(N + HEAD_ROW, "E").Value = Left(info, Len(info) - 1)
Next ok
Set Rng = .Range("A65536").End(xlUp).Offset(1)
Rng.Resize(1, 2).Merge
Rng.Value = "汇总" .Range("C65536").End(xlUp).Offset(1).Value = dicsum
.Range("D65536").End(xlUp).Offset(1).Value = "100%"
.Range("E:E").WrapText = True SetEdges .UsedRange
End With '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
UsedTime = VBA.Timer - StartTime
'MsgBox "本次耗时:" & Format(UsedTime, "0.000秒"), vbOKOnly, "NextSeven Excel Studio" ErrorExit:
Set Wb = Nothing
Set Sht = Nothing
Set Rng = Nothing
Set Dic = Nothing Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
Exit Sub
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ErrHandler:
If Err.Number <> 0 Then
MsgBox Err.Description & "!", vbCritical, "NextSeven Excel Studio"
'Debug.Print Err.Description
Err.Clear
Resume ErrorExit
End If
End Sub

  

05-11 16:54