- 帖子
- 967
- 主題
- 0
- 精華
- 0
- 積分
- 1001
- 點名
- 0
- 作業系統
- WIN XP
- 軟體版本
- OFFICE 2003
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-11-29
- 最後登錄
- 2022-5-17
 
|
27#
發表於 2012-2-29 11:57
| 只看該作者
回復 26# donod
看看對不對- Option Explicit
- 'ThisWorkbook 的預設事件
- Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
- Dim xX As Integer, Ar(), Br(), A As Range, B As Range, i As Integer, x As Variant
- With Sh
- If Target.Address(0, 0) = "R8" Then '選擇了 P7
- Set B = Range("Z9:AO9").Resize(300) '制訂 B 組(最頂1個利潤- 最後最底1個OPT) 範圍
- '而Set B = .Range("V9:AJ20"), Range之前 有 一點 代表是 以 With Target 為基點 所擴展的範圍
- ' B.Select ' 加上這行 可顯示 B的範圍在哪裡
- xX = 0 ' P欄
- ElseIf Target.Address(0, 0) = "S8" Then '選擇了 Q7
- Set B = Range("AR9:BG9").Resize(300) '制訂 C組(最頂1個利潤- 最後最底1個OPT) 範圍
- 'B.Select
- xX = 1 ' P欄 右移一欄 :Q欄
- ElseIf Target.Address(0, 0) = "T8" Then '選擇了 R7
- Set B = Range("BJ9:BY9").Resize(300) '制訂 D組(最頂1個利潤- 最後最底1個OPT) 範圍
- xX = 2 ' P欄 右移二欄 :R欄
- ElseIf Target.Address(0, 0) = "U8" Then '選擇了 Q7
- Set B = Range("CB9:CQ9").Resize(300) '制訂 C組(最頂1個利潤- 最後最底1個OPT) 範圍
- xX = 3 ' P欄 右移3欄 :Q欄
- ElseIf Target.Address(0, 0) = "V8" Then '選擇了 R7
- Set B = Range("CT9:DI9").Resize(300) '制訂 D組(最頂1個利潤- 最後最底1個OPT) 範圍
- xX = 4 ' P欄 右移4欄 :R欄
- ElseIf Target.Address(0, 0) = "W8" Then '選擇了 R7
- Set B = Range("DL9:EA9").Resize(300) '制訂 D組(最頂1個利潤- 最後最底1個OPT) 範圍
- xX = 5 ' P欄 右移5欄 :R欄
- Else
- Exit Sub '離開程序
- End If
- Set A = Range("H9:Q9").Resize(50) '制訂 A 組(全部OPT) 範圍
- A.Interior.ColorIndex = xlNone '清除A 組(OPT1-OPT10) 範圍圖樣
- B.Interior.ColorIndex = xlNone '清除B ,C , D. 組 範圍圖樣
- ' ReDim Ar(1 To A.Rows.Count) '重新宣告 陣列的維數
- ReDim Br(1 To B.Rows.Count)
- For i = 1 To B.Rows.Count '取得B,C,D,組的 (OPT1-OPT10) 的內容 置入陣列 Ar
- Br(i) = Join(Application.Transpose(Application.Transpose(B(i, 7).Resize(, 10))), ",")
- Next
- For i = 1 To A.Rows.Count
- x = Join(Application.Transpose(Application.Transpose(A(i, 1).Resize(, 10))), ",")
- x = Application.Match(x, Br, 0) '工作表函數Match 在Ar尋找 相同字串
- A(i, 11 + xX) = "" '清除
- If Not IsError(x) Then '找到傳回數字
- B(x, 7).Resize(, 10).Interior.ColorIndex = 6
- A(i, 1).Resize(, 10).Interior.ColorIndex = 6
- A(i, 11 + xX) = B(x, 1) 'B,C,D,組的分數
- End If
- Next
- End With
- End Sub
複製代碼 |
|