返回列表 上一主題 發帖

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

回復 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

回復 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

本帖最後由 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

本帖最後由 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

        靜思自在 : 我們要做好社會的環保,也要做好內心的環保。
返回列表 上一主題