Board logo

標題: 號碼挑選 [打印本頁]

作者: kelsie    時間: 2010-12-8 12:02     標題: 號碼挑選

有1~25的數字(似賓果盤的方式),點選被抽中的數字後,他會自動顯示出在另外一排~
是否需要用vba方式去設定呢??

呈現方式如附檔。

再麻煩各位大大們解答~感謝!!
作者: oobird    時間: 2010-12-8 13:34

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [g7] <> "" Then [c7:g7] = ""
If Not Intersect(Target, [C13:g17]) Is Nothing Then
[c7:g7].SpecialCells(4)(1) = Target
End If
End Sub
作者: kelsie    時間: 2010-12-8 14:03

好厲害!!
感謝 oobird大大 解答了我的問題!!
作者: kelsie    時間: 2010-12-8 15:17

本帖最後由 kelsie 於 2010-12-8 15:20 編輯

想再問~如果c7:g7選出來的5個數字~
要另外在c8:g8進行大小排序的話(小->大)
該如何進行??

p.s 我本來是直接在那行表格內直接下small函數
但想知道後端vba可以怎麼進行??
作者: oobird    時間: 2010-12-8 15:31

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [g7] <> "" Then [c7:g8] = ""
If Not Intersect(Target, [C13:g17]) Is Nothing Then
[c7:g7].SpecialCells(4)(1) = Target
End If
If [g7] <> "" Then
[c8:g8] = [SMALL(c7:g7,column(a1:e5))*column(a1:e1)^0]
End If
End Sub
作者: kelsie    時間: 2010-12-8 16:21

感謝oobird大大~~

If [g7] <> "" Then
[c8:g8] = [SMALL(c7:g7,column(a1:e5))*column(a1:e1)^0]
(這段的用意是??)
End If
作者: oobird    時間: 2010-12-8 16:30

用意就是當5個填滿時在下一列排序。
作者: GBKEE    時間: 2010-12-8 16:40

本帖最後由 GBKEE 於 2010-12-8 16:43 編輯
[SMALL(c7:g7,column(a1:e1))*column(a1:e1)^0]oobird 發表於 2010-12-8 15:31

oobird 版主:
第一次看到陣列公式用VBA寫在工作表上只顯示值而沒有公式
可否解釋 一下 "*column(a1:e1)^0"的運作情形
及引介類似的VBA陣列公式.讓小弟見識見識.
謝謝你
作者: oobird    時間: 2010-12-8 17:32

其實就是等於框選那5個儲存格輸入陣列公式=SMALL(C7:G7,COLUMN(A1:E1))*COLUMN(A1:E1)^0
在vba中用中括號把公式框起來就會直接得到公式的值。而vba中多個儲存格同時寫入一個公式時後面*COLUMN(A1:E1)^0就必須的,才不致成為第一個值。
作者: GBKEE    時間: 2010-12-8 20:30

回復 9# oobird
謝謝你的說明
作者: kelsie    時間: 2010-12-9 17:04

謝謝版主的解答~
作者: kelsie    時間: 2010-12-9 17:51

本帖最後由 kelsie 於 2010-12-9 17:52 編輯

一直研究不出來~要如何將數值呈現在兩排~或甚至多排的情形
我在數字挑選出來的時候~要做即時的排序,所以用了最陽春的方式在儲存格裡使用small函數~
但使用工作表保護時卻被限制住~研究了之前版主也曾分享的vba隱藏表格內公式的文章
卻還是不懂該如何下手.....

一直在延伸問題:dizzy:
不好意思再麻煩oobird版大~ 感謝!!
附上檔案[attach]4018[/attach]
作者: aa7551    時間: 2010-12-9 18:34

受教了,中括號的應用又多學了一項
作者: solely    時間: 2010-12-9 21:05

本帖最後由 solely 於 2010-12-9 21:06 編輯

將oobird版主的程式碼改成這樣XD
就可以呈現兩列~
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [g8] <> "" Then [c7:g10] = ""
If Not Intersect(Target, [C13:g17]) Is Nothing Then
[c7:g8].SpecialCells(4)(1) = Target
End If
If [g8] <> "" Then
[c9:g9] = [SMALL(c7:g8,column(a1:e1))*column(a1:e1)^0]
[c10:g10] = [SMALL(c7:g8,column(f1:j1))*column(f1:j1)^0]
End If
End Sub
作者: GBKEE    時間: 2010-12-10 08:44

回復 12# kelsie
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Dim Rng(2) As Range, i%, ii%
  3.     Set Rng(0) = [B3:I4]          '數字呈現區
  4.     Set Rng(1) = [B6:I7]          '數字排序區
  5.     Set Rng(2) = [B10:K13]        '數字選取區
  6.     If Not Intersect(Target, Rng(2)) Is Nothing Then
  7.         i = Application.Count(Rng(0))              '計算 數字呈現區的總數字數
  8.         If i = Rng(0).Count Then                   '數字呈現區 全部填滿數字 時
  9.             Rng(0) = "": Rng(1) = ""  '清空->數字呈現區,數字排序區
  10.             i = Application.Count(Rng(0))       '計算 數字呈現區的總數字數
  11.         End If
  12.         If Application.CountIf(Rng(0), Target) = 0 Then  '數字呈現區裡尋找重複的數字
  13.             Rng(0).Cells(i + 1) = Target
  14.             For ii = 1 To i + 1
  15.                 Rng(1).Cells(ii) = Application.Small(Rng(0), ii)   '傳回數字呈現區裡由小到大在數字排序區
  16.             Next
  17.         End If
  18.     End If
  19. End Sub
複製代碼

作者: kelsie    時間: 2010-12-10 10:27

[c10:g10] = [SMALL(c7:g8,column(f1:j1))*column(f1:j1)^0]


哈~我這段想了好久好久....真是感謝感謝!!
作者: kelsie    時間: 2010-12-10 10:30

回復 15# GBKEE


謝謝GBKEE版主~
學到另一種方法

剛才才發現原來我上傳了密碼設定的檔案了;P
作者: apolloooo    時間: 2011-6-28 23:24

^0  是什麼意思?
作者: Hsieh    時間: 2011-6-28 23:56

回復 18# apolloooo


    0次方




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