返回列表 上一主題 發帖

[發問] 如何自動選取相同的組合

回復 3# donod
實際工作時,有多個工作頁
你舉的範例不是多個工作頁

TOP

回復 5# donod
請複製到ThisWorkbook模組內
  1. 'ThisWorkbook 的預設事件
  2. Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  3.     Dim xX As Integer, Ar(), A As Range, B As Range, i As Integer, x As Variant
  4.     With Sh
  5.         If Target.Address(0, 0) = "P7" Then         '選擇了 P7
  6.             Set B = .Range("T10:AE21")              '制訂 B 組(分數- PT8) 範圍
  7.             xX = 0                                  ' P欄
  8.         ElseIf Target.Address(0, 0) = "Q7" Then     '選擇了 Q7
  9.             Set B = .Range("AH10:AS21")             '制訂 C組(分數-PT8) 範圍
  10.             xX = 1                                  ' P欄 右移一欄 :Q欄
  11.         ElseIf Target.Address(0, 0) = "R7" Then     '選擇了 R7
  12.             Set B = .Range("AV10:BG21")             '制訂 D組(分數-PT8) 範圍
  13.             xX = 2                                  ' P欄 右移二欄 :R欄
  14.         Else
  15.             Exit Sub                                 '離開程序
  16.         End If
  17.         Set A = .Range("H10:O21")                   '制訂 A 組(PT1-PT8) 範圍
  18.         A.Interior.ColorIndex = xlNone              '清除A 組(PT1-PT8) 範圍圖樣
  19.         B.Interior.ColorIndex = xlNone               '清除B ,C , D. 組 範圍圖樣
  20.         ReDim Ar(1 To A.Rows.Count)                 '重新宣告 陣列的維數
  21.         For i = 1 To B.Rows.Count                   '取得B,C,D,組的 (PT1-PT8) 的內容  置入陣列 Ar
  22.             Ar(i) = Join(Application.Transpose(Application.Transpose(B(i, 5).Resize(, 8))), ",")
  23.         Next
  24.         For i = 1 To A.Rows.Count
  25.             x = Join(Application.Transpose(Application.Transpose(A(i, 1).Resize(, 8))), ",")
  26.             x = Application.Match(x, Ar, 0)         '工作表函數Match 在Ar尋找 相同字串
  27.             A(i, 9 + xX) = ""                       '清除
  28.             If Not IsError(x) Then                  '找到傳回數字
  29.                 B(x, 5).Resize(, 8).Interior.ColorIndex = 6
  30.                 A(i, 1).Resize(, 8).Interior.ColorIndex = 6
  31.                 A(i, 9 + xX) = B(x, 1)               'B,C,D,組的分數
  32.             End If
  33.         Next
  34.     End With
  35. End Sub
複製代碼

TOP

回復 8# donod
如 Set  B=[B2]
B(2, 5) = B.Cells(2, 5) =B.Offset(1, 4) =[F3]
-> B.Cells(2, 5)  ->含B2 的位置    向下位移2列  :  向右位移5欄    =[F3]
-> B.Offset(1, 4)->不含B2 的位置  向下位移1列  :   向右位移4欄  =[F3]

TOP

回復 11# donod
Module1 中 的Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 是不會 有動作的
那是ThisWorkbook 的預設事件 那程序必須是在 ThisWorkbook中
你每一工作表的 B,C,D組的位置都不一樣 當然會不準確
需用每一工作表的預設事件 程序  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
依每一工作表的 B,C,D組的位置 去設定

TOP

回復 13# donod
用ThisWorkbook模組內   Private Sub Worksheet_SelectionChange(ByVal Target As Range)程序
是因為如 每一工作表有B,C,D 分組的 位置都一樣可用   Private Sub
Workbook_SheetSelectionChange   不必每一工作表模組內去寫程序

現在因每一工作表B,C,D 分組的 位置都不一樣  所以啊
每一有B,C,D 分組的工作表模組內 都要一有個它適用的   Private Sub Worksheet_SelectionChange(ByVal Target As Range)程序

TOP

回復 15# donod
With Target
        If Target.Address(0, 0) = "Q8" Then         '選擇了 Q8
            Set B = .Range("V9:AJ20")              '制訂 B 組(分數- PT8) 範圍
            B.Select    '   ***  加上這行看看  B的範圍在哪裡

16# 修改為 Set B = Range("V9:AJ20")   少了 一個點 Set B = .Range("V9:AJ20")    就正確了
有這 一點 代表是 以 With Target 為基點 所擴展的範圍

TOP

回復 19# donod
如此只有SHEETS("1" )有程式碼可以, 其他工作表沒有是沒有動作的

TOP

        靜思自在 : 人要知福、惜福、再造福。
返回列表 上一主題