返回列表 上一主題 發帖

[發問] 搜尋最後一列都有相同數字的組合。

[發問] 搜尋最後一列都有相同數字的組合。

相同數字的組合.rar (99.39 KB)

需求︰
以RrngA InputBox任取一個開獎版(DATA!)的期數及其填入CrngA InputBox的欄位數(簡稱A組合);
另以RrngB InputBox任取一個開獎版(DATA!)的期數及其填入CrngB InputBox的欄位數(簡稱B組合);
當A組合和B組合和A*B的組合都符合基本邏輯的條件三個組合之各驗證版的最後一列也都有顯示相同的號碼時,則產生效果檔案;否則不產生效果檔案。

其餘...詳如上傳範例說明。

敬請各位大大指導。感恩~~~~~~~~~~~

本帖最後由 ziv976688 於 2017-1-5 11:26 編輯

補充說明︰
n=2,2星對2星和n=3,1星對2星;n=3,2星對1星;n=3,2星對2星等︰因只列280期,所以找不到範例,請見諒!

建議先看"文字說明",再"拉出"I_280期_50_273-12+268-56_2次_12,42.和I_280期_50_273-4+250-6_3次_38.
如果還無法理解需求,再"拉出"其它範例來看。謝謝!

圖示中的流程說明是不才以"人工比對"時的感覺︰先比A和B,當其成立後~再比A*B,效率會比較快。
但在電腦跑程式的實務上為何?小弟不清楚;所以組合比對的"流程順序"︰請 各位大大擇優編寫。謝謝!

TOP

本帖最後由 c_c_lai 於 2017-1-5 20:04 編輯

回復 2# ziv976688 h0 dl3d04d04
參考看看!
因我不懂這遊戲規則,只將你的程式碼略予試寫,不知可否?
  1. Sub Ex()
  2.     Dim startrang%, endrang%, tim!, In1rr As Variant, In2rr As Variant, StrRng$, Ncount$, Number
  3.     Dim RrngA$, Nrange$, CrngA$, RrngB$, CrngB$, i%, j%, y%, num$, Order$, NUMX$
  4.     Dim m1%, sta%

  5.     StrRng = "1"                            '  InputBox("請輸入DATA!各搜尋比對的起始期數", "輸入期數")
  6.     Nrange = "280"                          '  InputBox("請輸入DATA!各搜尋比對的迄止(開獎)期數", "輸入期數")
  7.     num = "50"                              '  InputBox("請輸入效果檔A︰H複製範圍的期距數", "輸入距期數")
  8.     RrngA = "253,268,273"                   '  InputBox("請輸入各"第一個"比對的"基準期數", "輸入第一個期數")
  9.     CrngA = "1-2"                           '  InputBox("請輸入各"第一個"比對的7欄取任1~6之欄位數", "輸入欄位數(1~6)")
  10.     RrngB = "249-250,263,268"               '  InputBox("請輸入各"第二個"比對的"基準期數", "輸入第二個期數")
  11.     CrngB = "1-2"                           '  InputBox("請輸入各"第二個"比對的7欄取任1~6之欄位數", "輸入欄位數(1~6))
  12.     Order = ""                              '  InputBox("請輸入再篩選邏輯條件的起迄序號", "輸入序號(1~99)或不增加(按Enter)")
  13.     Number = "04,12,20-22,30,34,38,42,47"   '  InputBox("請輸入各指定的號碼", "輸入號碼(1~49)")
  14.     Ncount = "2-3"                          '  InputBox("請輸入驗證版的連續次數", "輸入次數(2~10)")
  15.    
  16.     tim = Timer
  17.     [L1:L10] = ""
  18.     NUMX = num
  19.     Application.DisplayAlerts = False
  20.     On Error Resume Next                    '  將錯誤處理的方式設為「繼續下一行」。
  21.     Application.ScreenUpdating = False      '  在背景下執行
  22.    
  23.     '  ...............
  24.     In1rr = ToSplit(Nrange, ",")
  25.    
  26.     '  ................
  27.     In2rr = ToSplit(NUMX, ",")
  28.     '  ................
  29.       
  30.     '  .......................
  31.     [L1] = Nrange & "=" & Format((Timer - tim) / 24 / 60 / 60, "hh:mm:ss")
  32.     [L2] = "DATA!各搜尋比對的起始期數=" & StrRng
  33.     [L3] = "A︰H(開獎版)的期距數=" & NUMX
  34.     [L4] = "比對基準期數A=" & RrngA
  35.     [L5] = "欄位數A=" & CrngA
  36.     [L6] = "比對基準期數B=" & RrngB
  37.     [L7] = "欄位數B=" & CrngB
  38.     [L8] = "增加再篩選邏輯條件的序號=" & Order
  39.     [L9] = "各指定同號碼=" & Number
  40.     [L10] = "驗證版的連續次數=" & Ncount
  41. End Sub

  42. Function ToSplit(txt As String, sp As String, Optional dash As String = "-") As String()
  43.     Dim FullNameComma As Variant, cts As Integer, nxt As Integer
  44.     Dim lf As Integer, rt As Integer, spl As String


  45.     FullNameComma = Split(txt, sp)
  46.     spl = ""
  47.     For cts = LBound(FullNameComma) To UBound(FullNameComma)
  48.         nxt = InStr(FullNameComma(cts), dash)
  49.         If nxt > 0 Then
  50.             lf = Val(Left(FullNameComma(cts), nxt - 1))
  51.             rt = Val(Mid(FullNameComma(cts), nxt + 1))
  52.             For nxt = lf To rt
  53.                 spl = IIf(spl = "", CStr(nxt), spl & sp & CStr(nxt))
  54.             Next
  55.         Else
  56.             spl = IIf(spl = "", FullNameComma(cts), spl & sp & FullNameComma(cts))
  57.         End If
  58.     Next cts
  59.    
  60.     ToSplit = Split(spl, sp)
  61. End Function
複製代碼

TOP

回復 1# ziv976688
寫了一個測試程式,提供你了解 ToSplit() 的應用:
  1. Sub Test()
  2.     Dim txt As String, sp As Variant
  3.    
  4.     txt = "249-255,263,268"
  5.     sp = ToSplit(txt, ",")
  6.     MsgBox "249-255,263,268" & vbCrLf & Join(sp, ",")
  7.    
  8.     txt = "04,12,20-22,30,34,38,42,47"
  9.     sp = ToSplit(txt, ",")
  10.     MsgBox "04,12,20-22,30,34,38,42,47" & vbCrLf & Join(sp, ",")
  11. End Sub
複製代碼

TOP

回復 4# c_c_lai
謝謝您的不吝指導
重新說明如下︰
BASE_T-1.rar (74.91 KB)
備註︰代用名詞說明
A組合=RrngA InputBox任取一個開獎版(DATA!)的期數及其填入CrngA InputBox的欄位數。
B組合=RrngB InputBox任取一個開獎版(DATA!)的期數及其填入CrngB InputBox的欄位數。
n= Ncount InputBox填入驗證版的指定次數。
I = Number InputBox填入指定的號碼。

通則︰
RrngA的期數<Nrange期數才有效~執行。
RrngB的期數<RrngA期數才有效~執行。
搜尋的範圍=由StrRng InputBox填入的各期數到Nrange InputBox填入的各期數為止。

基本邏輯︰
以A組合或B組合或A*B的雙組合~在搜尋的範圍內~
由其基準列往上搜尋第1個到第n個的相同組合(即驗證版),
當該組合的第1個到第n個的相同組合之最後一列(=Nrange期數的對應期數)~
都有顯示任一個(含)以上的I時,則邏輯條件成立。

需求︰產生效果檔及其Sheet1格式內容。
1.當A組合和B組合和A*B的雙組合等都符合基本邏輯的條件~且
三個組合之各驗證版的最後一列(=Nrange期數的對應期數)也都有顯示相同的I時,則產生效果檔案。

2.名稱
總資料夾︰I_Nrange期_NUM_ RrngA _ CrngA星+RrngA _ CrngA星_ Ncount次_ Number

分資料夾名稱和效果檔案名稱和效果檔案Sheet1的內容&格式~~~~~~~~~~~
詳如各範例檔的圖示和說明。謝謝!

TOP

回復 4# c_c_lai
看這樣行不行~~~~






以上為1星_1星_2次的圖示~~
圖示1~3=搜尋邏輯的分解說明。
拉平圖說=開獎版&3個 組合的驗證版的對應期數拉平齊後的圖示和重點說明。
Sheet1=為  I_28期_15_24-3+20-5_2次_3,11,21,49 效果檔案的內容和工作表格式。

其餘 1_1星_3次; 1_2星_2次; 1星_2星_3次; 2星_1星_2次;2星_1星_3次;2星_2星_2次;2星_2星_3次
情詳見上傳範例。

PS:BASE_T-1(MF)的DATA開獎表為模擬資料。

TOP

回復 6# ziv976688
    '  22 ~ 26  :  21 (4)、11 (3)、2 (2)、26 (2)、 38 (2)、 43 (2)、 46 (2)
    '  20 ~ 24  :  21 (4)、2 (3)、12 (2)、14 (2)、 30 (2)、 46 (2)、 17 (1)
    '  45 ~ 51  :  11 (3)、34 (2)、6 (2)、41 (2)、 49 (2)、 22 (2)、 30 (2)
這三種組合,跟你要的數據有所差距嗎?

TOP

本帖最後由 ziv976688 於 2017-1-9 10:56 編輯

回復 7# c_c_lai
您是說指定號碼的範圍嗎?
Number InputBox  指定號碼的範圍是從01~49作任意選擇:
EX:1,3,5就是如果各組合(即A組合,B組合,A*B組合)的最後一列都有顯示01或03或05的任一個(含)以上的指定號碼即成立。
EX:1-3,10-15就是如果各組合的最後一列都有顯示01或02或03或10或11或12或13或14或15的任一個(含)以上的指定號碼即成立。
EX:10-15,23,38,47-49就是如果各組合的最後一列都有顯示11或12或13或14或15或23或38或47或48或49的任一個(含)以上的指定號碼即成立。
EX:1-49就是如果各組合的最後一列都有顯示01~49的任一個(含)以上的指定號碼即成立。
所以~
範例主檔(BASE_T-1(MF))的指定號碼(Number) = "3,11,21-26,43,49"
即是如果各組合的最後一列都有顯示03或11或21或22或23或24或25或26或43或49的任一個(含)以上的指定號碼即成立。

還是您是說比對的基準期數範圍嗎?
RrngA = "21-24"  指A基準期數21期到24期
RrngB = "18-21" 指B基準期數18期到21期
RrngA>RrngB 才執行;所以
A組合基準期數  21期, 22期, 23期, 24期
B組合基準期數 18期,19期, 20期, 21期
A組合基準期數*B組合基準期數的比對期數有21*18,21*19,21*20;22*18,22*19,22*20,22*21;23*18,23*19,23*20,23*21,23*22;24*18,24*19,24*20,24*21,24*22,24*23

=============================================================================================================
   '  22 ~ 26  :  21 (4)、11 (3)、2 (2)、26 (2)、 38 (2)、 43 (2)、 46 (2)
    '  20 ~ 24  :  21 (4)、2 (3)、12 (2)、14 (2)、 30 (2)、 46 (2)、 17 (1)
    '  45 ~ 51  :  11 (3)、34 (2)、6 (2)、41 (2)、 49 (2)、 22 (2)、 30 (2)
不太懂 21 (4)、11 (3)、2 (2)中的 (4),(3),(2)的意思?
是指22期到26期之間,21出現4次;11出現3次;02出現2次?

期間某號碼出現幾次與需求無關^^

TOP

本帖最後由 c_c_lai 於 2017-1-9 11:12 編輯

回復 8# ziv976688
是指22期到26期之間,21出現4次;11出現3次;02出現2次。

至於
(一) 指定號碼的範圍
     是指 "A基準期數21期到24期" 的 第 24 期行中,有出現 "指定號碼"?

(二) A基準期數*B基準期數比對的期數
     有21*18,21*19,21*20;
     22*18,22*19,22*20,22*21;23*18,23*19,23*20,23*21,23*22;
     24*18,24*19,24*20,24*21,24*22,24*23
     不太明白,21*18 , . . . . .  等等是何義?

TOP

再補充:
CrngA=1-2;表示A組合基準期數 的7個欄位任取其中的1個欄位和任取其中的2個欄位的不重複組合。
即1,2,3,4,5,6,7和12.13,14,15,16,17,23,24,25,26,27,34,35,36,37,45,46,47,56,57,67等共28個同欄同號的組合。

CrngA=1-3;表示A組合基準期數 的7個欄位任取其中的1個欄位和任取其中的2個欄位和任取其中的3個欄位的不重複組合。
即1,2,3,4,5,6,7和12.13,14,15,16,17,23,24,25,26,27,34,35,36,37,45,46,47,56,57,67;123,124,125,126,127,134,135,136,137,145,146,147,156,157,167;234,235,236,237,...567;等共63個同欄同號的組合。
其餘1-4,1-6,2-3,2-4,2-5,2-6,....,5-6,1,2,3,4,5,6類推。

CrngB=1-2;表示B組合基準期數 的7個欄位任取其中的1個欄位和任取其中的2個欄位的不重複組合。
即1,2,3,4,5,6,7和12.13,14,15,16,17,23,24,25,26,27,34,35,36,37,45,46,47,56,57,67等共28個同欄同號的組合。

CrngA=1-3;表示A組合基準期數 的7個欄位任取其中的1個欄位和任取其中的2個欄位和任取其中的3個欄位的不重複組合。
即1,2,3,4,5,6,7和12.13,14,15,16,17,23,24,25,26,27,34,35,36,37,45,46,47,56,57,67;123,124,125,126,127,134,135,136,137,145,146,147,156,157,167;234,235,236,237,...567;等共63個同欄同號的組合。
其餘1-4,1-6,2-3,2-4,2-5,2-6,....,5-6,1,2,3,4,5,6類推。

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題