- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
22#
發表於 2012-12-20 09:34
| 只看該作者
本帖最後由 GBKEE 於 2012-12-20 09:44 編輯
16# 檔案的程式碼,試看看程式處裡的速度是否滿意!!- Option Explicit
- Const xRow As Integer = 24
- Const xCol As Integer = 24
- Private Sub AUTO_OPEN()
- Dim Rng As Range, E As Range, xi As Integer
- Sheets("Overlap").Activate
- Set Rng = [A:A]
- Rng.Replace "ID", "=XXX", xlWhole
- Set Rng = Rng.SpecialCells(xlCellTypeFormulas, xlErrors)
- ActiveSheet.CheckBoxes.Delete
- For Each E In Rng.Cells
- With Cells(xi + 5, "AA")
- With ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height)
- .Caption = "Item" & xi + 1
- .OnAction = "Ex_Action"
- E.Offset(1, 1).Resize(xRow, xCol).Name = "_" & .Caption '設置範圍名稱
- End With
- End With
- xi = xi + 1
- Next
- Rng.Value = "ID"
- End Sub
- Private Sub Ex_Action()
- Dim cBox As Object, Rng As Range, r As Integer, y As Integer, xi As Integer
- Dim Ar(), E As Variant, t As Date
- t = Time
- For Each cBox In ActiveSheet.CheckBoxes
- If cBox.Value = 1 Then
- If Rng Is Nothing Then Set Rng = Range("_" & cBox.Caption)
- If Not Rng Is Nothing Then Set Rng = Union(Rng, Range("_" & cBox.Caption))
- End If
- Next
- With Range("AI5").Resize(xRow, xCol)
- .Interior.ColorIndex = xlNone
- For Each cBox In .Cells
- If cBox <> "___" Then cBox = 0
- Next
- End With
- Application.ScreenUpdating = False
- Range("B:Z").Interior.ColorIndex = xlNone
- If Rng Is Nothing Then Exit Sub
- ReDim Ar(1 To xRow, 1 To xCol) '設定:陣列大小
- '******** 每一個範圍中同一位置有資料的:計數
- For Each cBox In Rng.Areas '處裡每一個範圍
- For r = 1 To xRow
- For y = 1 To xCol
- If cBox(r, y) = "___" Then GoTo 0 '不處裡
- If cBox(r, y) <> 0 Then Ar(r, y) = Ar(r, y) + 1 '紀錄資料
- 0:
- Next
- Next
- Next
- '******** 每一個範圍中同一位置資料的計數百分比:設下顏色
- For Each cBox In Rng.Areas
- For r = 1 To xRow
- For y = 1 To xCol
- xi = 0 '百分比:歸零
- If cBox(r, y) = "___" Then GoTo 1
- For Each E In Array(0, 0.19, 0.39, 0.59, 0.79, 0.99, 1)
- xi = xi + 1
- If Ar(r, y) / Rng.Areas.Count <= E Then Exit For '取得百分比
- Next
- If Ar(r, y) > 0 Then cBox(r, y).Interior.ColorIndex = [AA2].Cells(1, xi).Interior.ColorIndex
- '[AA2].Cells(1, xi):顏色的位置
- 1:
- Next
- Next
- Next
- '******** 統計範圍位置資料: 計數, 百分比顏色
- With Range("AI5")
- For r = 1 To xRow
- For y = 1 To xCol
- If .Cells(r, y) <> "___" Then
- .Cells(r, y) = IIf(Ar(r, y) = "", 0, Ar(r, y))
- If Ar(r, y) > 0 Then
- .Cells(r, y).Interior.ColorIndex = Rng(r, y).Interior.ColorIndex
- Else
- .Cells(r, y).Interior.ColorIndex = [AA2].Interior.ColorIndex
- End If
- End If
- Next
- Next
- End With
- Application.ScreenUpdating = True
- MsgBox Format(t, "開始 hh:mm:ss") & vbLf & Format(Time, "結束 hh:mm:ss") & vbLf & vbLf & Format(Time - t, "費時 hh:mm:ss")
- End Sub
複製代碼 回復 19# cmo140497 |
|