Board logo

標題: 任選儲存格累加設定數值 [打印本頁]

作者: y663258    時間: 2011-11-17 16:23     標題: 任選儲存格累加設定數值

各位大大:如附件說明自己找資料就是湊不出程式,請協助謝謝。
作者: Hsieh    時間: 2011-11-17 16:46

回復 1# y663258


    你的舉例C16為何是16?
作者: GBKEE    時間: 2011-11-17 17:14

本帖最後由 GBKEE 於 2011-11-18 07:04 編輯

回復 1# y663258
  1. Option Explicit
  2. Public A As Integer
  3. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  4.     Dim AR(1 To 7) As Range, i As Integer, s As Integer
  5.     Application.EnableEvents = False
  6.     Set AR(1) = [A3:E12]
  7.     Set AR(2) = [G3:K12]
  8.     Set AR(3) = [M3:Q12]
  9.     Set AR(4) = [A15:E24]
  10.     Set AR(5) = [G15:K24]
  11.     Set AR(6) = [M15:P24]
  12.     Set AR(7) = [A27:D37]
  13.     For i = 1 To 7
  14.         If i = 1 Then s = 1 Else s = s * 2
  15.         If Not Intersect(Target(1), AR(i)) Is Nothing Then            A = s + A
  16.     Next
  17.     Application.EnableEvents = True
  18. End Sub
  19. Sub Ex()   '插入物件(圖片,文字框等..按鈕) 指定此巨集
  20.     Dim Rng As Range
  21.     Set Rng = Range("B39", Range("B39").End(xlDown))
  22.     Rng(A).Select
  23.     MsgBox Rng(A)
  24.     A = 0
  25. End Sub
複製代碼

作者: y663258    時間: 2011-11-17 17:36

Hsieh 大大C16是在4應是8,誤值了不好意思。
作者: y663258    時間: 2011-11-17 17:46

GBKEE 大大大謝謝幫忙         
    Dim Rng As Range
    Set Rng = Range("B39", Range("B39").End(xlDown))
    Rng(A).Select
    MsgBox Rng(A)
    A = 0
End Sub

經測試只顯示(姓氏)不能比對累加後數值顯示出姓氏,請再修正謝謝。
作者: GBKEE    時間: 2011-11-17 21:47

回復 5# y663258
'Module 的程式碼
  1. Option Explicit
  2. Public A()     'Module 的程式碼
  3. Sub Ex()   '插入物件(圖片,文字框等..按鈕) 指定此巨集
  4.     Dim Rng As Range, M As String, i
  5.      Set Rng = Range("B39", Range("B39").End(xlDown))
  6.     On Error GoTo Thend
  7.     For i = 0 To UBound(A) - 1
  8.         M = M & IIf(M <> "", " : ", "") & Rng(A(i))
  9.     Next
  10.     MsgBox M
  11.     Erase A
  12. Thend:
  13. End Sub
複製代碼
Worksheet 的程式碼
  1. Option Explicit
  2. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  3.     Dim AR(1 To 7) As Range, i As Integer, s As Integer
  4.     Application.EnableEvents = False
  5.     Set AR(1) = [A3:E12]
  6.     Set AR(2) = [G3:K12]
  7.     Set AR(3) = [M3:Q12]
  8.     Set AR(4) = [A15:E24]
  9.     Set AR(5) = [G15:K24]
  10.     Set AR(6) = [M15:P24]
  11.     Set AR(7) = [A27:D37]
  12.     For i = 1 To 7
  13.         If i = 1 Then s = 1 Else s = s * 2
  14.         If Not Intersect(Target(1), AR(i)) Is Nothing Then
  15.             On Error GoTo TEN:
  16.             A(UBound(A)) = s
  17.             ReDim Preserve A(UBound(A) + 1)
  18.         End If
  19.     Next
  20.     Application.EnableEvents = True
  21.     Exit Sub
  22. TEN:
  23. ReDim A(0)
  24. Resume
  25. End Sub
複製代碼

作者: y663258    時間: 2011-11-17 22:14

GBKEE 大大謝謝指導依示測試MsgBox顯示是點選過的姓氏,可否顯示點選過累加的姓氏,
    如點選b4 ,h4,n4,g22=1+2+4+16=23比對b39:b138MsgBox顯然
作者: Hsieh    時間: 2011-11-17 23:51

回復 7# y663258
  1. Sub nn()
  2. Dim ar As Range
  3. Set ar = Union([A3:E12], [G3:K12], [M3:Q12], [A15:E24], [G15:K24], [M15:P24], [A27:D37])
  4. For Each a In Selection
  5. s = 1
  6. For Each c In ar.Areas
  7.   Set b = Intersect(a, c)
  8.   If Not b Is Nothing Then cnt = cnt + s: Exit For
  9.   s = s * 2
  10. Next
  11. Next
  12. MsgBox [B39:B138].Cells(cnt, 1)
  13. End Sub
複製代碼

作者: GBKEE    時間: 2011-11-18 07:09

回復 7# y663258
請看    3樓已修正的程式碼.
作者: y663258    時間: 2011-11-18 09:22

謝謝二位大大不厭其煩撥冗指教,Hsieh 程式經測試,MsgBox 顯示的是,選取過的最後一組,小弟要的是選取過的累加合計數值所對應姓氏。如b4 ,h4,n4,g22=1+2+4+16=23比對b39:b138MsgBox顯然宋,這是猜姓氏的遊戲。在1-7請被猜者告訴猜測者1-7有出現姓氏的,如1,2,3,5有出現就是1+2+4+16=23對照姓氏表宋,被猜者就是姓宋,兄台再幫忙修正。
作者: GBKEE    時間: 2011-11-18 09:34

本帖最後由 GBKEE 於 2011-11-18 09:41 編輯

回復 10# y663258
如1,2,3,5有出現就是1+2+4+16=23對照姓氏表宋,被猜者就是姓宋
Hsieh超版 的程式碼,3樓的程式碼 ,不就是如此嗎?
真是看不出你要的是什麼?
作者: y663258    時間: 2011-11-18 11:34

GBKEE 大大Hsieh超版 的程式碼,3樓的程式碼 ,小弟需求如1,2,3,5有出現宋就是1+2+4+16=23對照姓氏表宋,被猜者就是姓宋,但Hsieh超版 的程式碼結果是16顯示郭,沒有累加所選過的數值1+2+4+16只選最後選擇的16。
作者: y663258    時間: 2011-11-18 11:36

回復 11# GBKEE

GBKEE 大大Hsieh超版 的程式碼,3樓的程式碼 ,小弟需求如1,2,3,5有出現宋就是1+2+4+16=23對照姓氏表宋,被猜者就是姓宋,但Hsieh超版 的程式碼結果是16顯示郭,沒有累加所選過的數值1+2+4+16只選最後選擇的16。
作者: GBKEE    時間: 2011-11-18 12:44

回復 13# y663258
Hsieh超版 的程式碼結果是16顯示郭,沒有累加所選過的數值1+2+4+16只選最後選擇的16。
有的是 23 不是 16  你再 試試看
作者: y663258    時間: 2011-11-18 15:36

回復 14# GBKEE
GBKEE 大大可應是我說明不清楚,現反向思考若是一位姓的告訴我們在1-7裡他的姓氏在1(A3A:E12)
,2(G3:K12),3(M3:Q12),6(M15:P24)有出現,所我們將1.2.3.6實際數值1+2+4+32=39(因1-7實際數值即1,2,4,8,16,32,64查A38編號39對應B77董。Hsieh 版大目前程式會顯示曾因是取最後選取的6=32沒有累右前三個選項1.2.3之實際數值1,2,4。簡言之是猜姓氏在1-7有該姓氏出現即將實際數值相加後去查38編號就可猜中姓氏。
                      1  2  3  4   5    6     7                                                                                   
   實際數值         1 2  4   8  16   32   64
測試姓(張)對照表是編號3的選取1  2有出現( 張)實際數值 是1+2=3     若顯示最後選取2 實際數值 也是2在對照表編號2是王就錯了
作者: GBKEE    時間: 2011-11-18 17:17

回復 15# y663258
我3樓 的程式碼 你在工作上一一的點選範圍過後 執行 Sub Ex()  可顯示答案  嗎?
Hsieh 版大目前程式會顯示曾因是取最後選取的6=32沒有累右前三個選項1.2.3之實際數值1,2,4。
有阿 你是如何執行的
Hsieh超版 的程式碼 For Each a In Selection  你可能不了解 Selection這意思
請你在工作上先按住 Ctrl  鍵 然後 點選 1,2,3 的範圍後 執行程式碼 看看是否對的
作者: y663258    時間: 2011-11-18 17:33

回復 16# GBKEE
原來要按住 Ctrl  操作,真的很感謝!這樣就正確了。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)