Board logo

標題: [發問] 請修正Sheets("Sheet1")改變格式後的語法。 [打印本頁]

作者: ziv976688    時間: 2021-10-11 05:52     標題: 請修正Sheets("Sheet1")改變格式後的語法。

本帖最後由 ziv976688 於 2021-10-11 05:55 編輯

參考附件 : [attach]34188[/attach]
Sheets("Sheet1")的C2:AY21改成目前的格式~
請問:下列紅色字顏的程式碼要如何修正?
我試改許久總是跳差1列
'=================================列137
    .Range("c2:ay21").ClearContents
    Crr = .Range("c2:ay9"): Arr = .Range("c37:ay" & R): n = 0
    cR = Array("", 1, 2, 3, 6, 7, 8)   '列140
    For ci = 1 To UBound(cR) + 2: For cj = 1 To UBound(Crr, 2)
        For ai = ci To UBound(Arr) Step 17
            If Arr(ai, cj) = "" Then GoTo 97
            Crr(ci, cj) = Crr(ci, cj) + Arr(ai, cj)
97:     Next ai: n = 0
    Next cj: Next ci
    .[c2].Resize(UBound(Crr), UBound(Crr, 2)) = Crr

    Crr = .Range("c13:ay20"): cR = Array("", 1, 2, 3, 6, 7, 8)    '列149
    For ci = 1 To UBound(cR) + 2: For cj = 1 To UBound(Crr, 2)
        For ai = ci To UBound(Arr) Step 17
            If Arr(ai, cj) = "" Then GoTo 98
            n = n + 1: Crr(ci, cj) = n
98:     Next ai: n = 0
    Next cj: Next ci
    .[c13].Resize(UBound(Crr), UBound(Crr, 2)) = Crr


以上  懇請賜教!  謝謝!

作者: samwang    時間: 2021-10-11 08:17

回復 1# ziv976688

請問:下列紅色字顏的程式碼要如何修正?
>> 不好意思,上次寫的有問題導致無法修改,請修改3個地方如下,謝謝

Dim ci%-->Dim ci  '列2
CR = Array("",1, 2, 3, 6, 7, 8)-->CR = Array(1, 2, 3, 6, 7, 8)  '列140 '列149
For ci = 1 To UBound(cR) + 2 -->For Each ci In CR     '列140 '列149

作者: ziv976688    時間: 2021-10-11 08:54

本帖最後由 ziv976688 於 2021-10-11 09:23 編輯

回復 2# samwang
您太客氣了~您肯指導和幫忙,末學就已經銘感五內

測試結果 : [attach]34189[/attach]
總次數和個數加總的前三大數字都OK!
~
總次數次小和三小的數字是顯示在"最小(第7列)"和"次小(第8列)"
個數加總次小和三小的數字是顯示在"最小(第18列)"和"次小(第19列)"
二個三小(列9列20)是空白的

以上   懇請賜正~謝謝您
   

作者: samwang    時間: 2021-10-11 12:04

回復 3# ziv976688

不好意思,請問一下期數每次只有一個,對吧?
如果是就直接由下面的資料複制到上面位置,這樣就不用在寫迴圈取值會比較快,謝謝
作者: ziv976688    時間: 2021-10-11 13:03

本帖最後由 ziv976688 於 2021-10-11 13:08 編輯

回復 4# samwang
另有1個版本是搜尋全部期數的字檔案~
因為其相關程式碼是一樣的
所以我是以單期的版本作提問
然後再以您賜正後的程式碼再自行複製套用。

請參考另一個版本(Sheets("Sheet1")還沒有改格式~執行後的答案是正確的)
[attach]34190[/attach]
S = Single(單期)
T = Total (全部期數~本例=3期)
PS : 最多的期數=98期(49期*2輪)
謝謝您



作者: samwang    時間: 2021-10-12 07:23

本帖最後由 samwang 於 2021-10-12 07:29 編輯

回復 5# ziv976688

請參考另一個版本(Sheets("Sheet1")還沒有改格式~執行後的答案是正確的)
>> 我知道原因了,因為這次欄位和上次的不一樣了,所以上次那個又不行了,必須又要重寫且研究一下規則,謝謝

作者: ziv976688    時間: 2021-10-12 09:26

本帖最後由 ziv976688 於 2021-10-12 09:45 編輯

回復 6# samwang
必須又要重寫且研究一下規則,謝謝
Samwang大大:
是我想得太簡單了?還是您誤解了?

補充說明如下 :
備註:
1_7S_搜尋()字檔(主檔)和7T_搜尋()字檔(主檔)都是貴解
2_7S_搜尋()字檔(主檔)是將()字檔案,以檔案名稱執行成為1個效果檔。
3_7T_搜尋()字檔(主檔)是將()字檔案,以檔案名稱彙總,執行成為1個總效果檔。

7S_搜尋()字檔(主檔)_1007(1樓的附件比較容易作說明需求)為例~
因為次數加總和個數加總的統計範圍和邏輯都不變~
只是在原C2:AY16填入統計結果的區域多插入4列=C2:AY20~即將~
原總次數
最大填入C2:AY2;次大填入C3:AY3;三大填入C4:AY4
最小填入C6:AY6;次小填入C7:AY7;三小填入C8:AY8
改為:
最大填入C2:AY2;次大填入C3:AY3;三大填入C4:AY4
最小填入C7:AY7;次小填入C8:AY8;三小填入C9:AY9

原個數加總
最大填入C10:AY10;次大填入C11:AY11;三大填入C12:AY12
最小填入C14:AY14;次小填入C15:AY15;三小填入C16:AY16
改為:
最大填入C13:AY13;次大填入C14:AY14;三大填入C15:AY15
最小填入C18:AY18;次小填入C19:AY19;三小填入C20:AY20

所以末學才會認為:只要更改~
cR = Array("", 1, 2, 3, 6, 7, 8)   '列140
    For ci = 1 To UBound(cR) + 2: For cj = 1 To UBound(Crr, 2)

Crr = .Range("c13:ay20"): cR = Array("", 1, 2, 3, 6, 7, 8)    '列149
    For ci = 1 To UBound(cR) + 2: For cj = 1 To UBound(Crr, 2)

如果不是如末學想的那樣Easy而是如您所說~須又要重寫且研究一下規則~
這樣實在是對不起您~您就不用再重新編寫了。
我就在原列5,9,13,16填入合計數字即可。
謝謝您




作者: samwang    時間: 2021-10-12 12:15

回復 7# ziv976688


如果不是如末學想的那樣Easy,而是如您所說~須又要重寫且研究一下規則~
>> 本來想說如您說的只要小改就好,沒想要費這麼大工夫,所以直接重寫單期和多期都有寫入,請再測試看看,謝謝。
作者: ziv976688    時間: 2021-10-12 16:26

本帖最後由 ziv976688 於 2021-10-12 16:46 編輯

回復 8# samwang
實在是過意不去~還勞駕您費心重新編寫~感恩

所以直接重寫單期和多期都有寫入
單期和多期都有
請問 : 2種類型的效果檔要怎麼分開呈現?
目前的測試結果是3個單期的效果檔(Ans.還沒有比對.)。
我現在應該怎麼作 ?
才能跑出1個多期的效果檔。
煩請告知~謝謝您
作者: samwang    時間: 2021-10-12 17:38

回復  samwang
實在是過意不去~還勞駕您費心重新編寫~感恩

所以直接重寫單期和多期都有寫入 ...
ziv976688 發表於 2021-10-12 16:26


不好意思,我寫得多期是我自己猜想您要的需求,規則可能含您的需求不一樣
可以提供相關單期和多期的規則和資料做測試,謝謝
作者: ziv976688    時間: 2021-10-12 19:46

本帖最後由 ziv976688 於 2021-10-12 20:15 編輯

回復 10# samwang
瞭解了~~~
不好意思處處麻煩您~
末學先自行研習您的新增或修改的語法,
研習後~看能不能自行依照自己所需調整~
如真有不解的地方再請教您。
謝謝您
PS :
如要測試多期~~以1樓的附件測試即可。
謝謝您
作者: ML089    時間: 2021-10-12 23:12

本帖最後由 ML089 於 2021-10-12 23:13 編輯

回復 3# ziv976688

測試結果 :  7S_搜尋(統)字檔(主檔)_1011.rar (42.55 KB)
總次數和個數加總的前三大數字都OK!
但~
總次數的次小和三小的數字是顯示在"最小(第7列)"和"次小(第8列)"
個數加總的次小和三小的數字是顯示在"最小(第18列)"和"次小(第19列)"
即二個三小(列9和列20)是空白的。


1        B2        最大                B37        最大
2        B3        次大                B38        次大
3        B4        三大                B39        三大
4        B5        合計                B40       
5        B6        空格                B41        最小
6        B7        最小                B42        次小
7        B8        次小                B43        三小
8        B9        三小                B44       
資料 B2:B9 與 B37:B44 位置不一致,最小、次小、三小 錯開一列,程式並未處理這差異,當然有錯誤
下列 ai 與 ci 是相對連動,這樣會造成 最小、次小、三小 錯開一列

    Crr = .Range("c2:ay9"): Arr = .Range("c37:ay" & R): n = 0
    'cR = Array("", 1, 2, 3, 6, 7, 8)
    CR = Array(1, 2, 3, 6, 7, 8)
    For Each ci In CR: For cj = 1 To UBound(Crr, 2)
        For aii = ci To UBound(Arr) Step 17
            If ci < 6 Then ai = aii Else ai = aii + 1
            If Arr(ai, cj) = "" Then GoTo 97
            Crr(ci, cj) = Crr(ci, cj) + Arr(ai, cj)
97:     Next aii: n = 0
    Next cj: Next ci
下段也需要改
作者: ziv976688    時間: 2021-10-12 23:54

回復 10# samwang
Samwang大大:
檢視全部的程式碼後~您新增修的段落都在139~列266

不好意思~
多期的程式碼改為註解後~
不知是哪裡註解錯了?
就是跑不出C2:AY21的單期答案~
C2:AY51的答案OK!
詳如附件: [attach]34201[/attach]

以上  懇請賜正!  謝謝您!

作者: ziv976688    時間: 2021-10-13 04:04

回復 10# samwang
13樓的C2:AY51的答案OK~修正為C24:AY51
謝謝您
作者: ziv976688    時間: 2021-10-13 04:36

回復 12# ML089
版大 : 謝謝您
詳如附件:[attach]34202[/attach]
請詳見 : 7S前3大&小_0_1902期_100_1894-10+1887-10_1次-(Ans.比對)~有比對答案的圖示
PS:操作說明~
請開啟7S_搜尋()字檔(主檔)_1013==>點按執行鍵==>即可產生3個效果檔~
答案與3個(Ans.比對)檔案的 A1:AY51相同

以上  懇請賜正!  謝謝您!

作者: samwang    時間: 2021-10-13 07:26

回復 11# ziv976688


為什需求結果不一樣? 有時候要顯示單期有時候要很多期數?
作者: ML089    時間: 2021-10-13 10:31

回復 15# ziv976688

If ci < 6 Then ai = aii Else ai = aii + 1
有2處要改為
If ci < 6 Then ai = aii Else ai = aii - 1

要對接 37 38 39 41 42 43
CR = Array(1, 2, 3, 6, 7, 8) 的位置對應是 C欄位的 列 2 3 4 7 8 9 資料
C欄位的 列 37 38 39 41 42 43的位置對應順序是  Array(1, 2, 3, 5, 6, 7)
可見有誤差
作者: samwang    時間: 2021-10-13 12:42

回復 13# ziv976688


你講的沒錯 #8有問題,問題是結果的資料沒清除乾淨,導致第1個沒問題,第2個就錯誤,
另外,被單期和多期定義搞亂,導致....,已更正單純用#1需求去寫,請再測試看看,謝謝   

PS: 如您提到又原程式小修改就可以符合#1需求,有時候想太多,腦筋打結.....
作者: ziv976688    時間: 2021-10-13 16:45

本帖最後由 ziv976688 於 2021-10-13 17:13 編輯

回復 17# ML089
參考附件:[attach]34210[/attach]
版大:
不好意思,列17列20還有一點小BUG~
測試結果:
EX:7S前3大&小_0_1902期_100_1894-10+1887-10_1次-(Ans.比對)~
列17是空白列~不應該有數字,但目前E17<>"";而是=1~答案詳如:BF17
列20是三小~應有的數字都沒有顯示出來~答案詳如:BO20:CZ20
其餘7S---_1901-10+1899---(Ans.比對);7S---_1901-10+1900---(Ans.比對)…類推

因為C18:AY19都正確~所以我實在不知道列156的程式碼要怎麼調整?
If ci < 6 Then ai = aii Else ai = aii – 1 '列156

以上  懇請賜正!  謝謝您

PS :
1_是不是必須調整列37以下的格式~如果需要~請告知
2_如果需要調整列37以下~容我思考一下(因為列44~列51可能已經不需要了)。
謝謝您


作者: ziv976688    時間: 2021-10-13 16:49

回復 18# samwang
sanwang大大:
測試成功
謝謝您的耐心和指導和熱心幫忙~感恩

PS:
因為以1F的範例作說明,比較簡單明瞭,而且1F範例的貴程式碼有跳17列後~
如是空白就不再統計並離開程式=>即=單期,如有數字就繼續統計=>即=多期
所以末學才一直強調以1F的附件作說明的範例~
造成您的困擾~尚請您見諒~謝謝您

作者: ziv976688    時間: 2021-10-14 04:26

本帖最後由 ziv976688 於 2021-10-14 04:32 編輯

回復 18# samwang
不好意思,末學自行修改"多期"的程式碼~改到半夜都沒有成功 ;
所以覺得Sheets("Sheet1")還是必須更動"B36"等以下的"表頭"格式,以利日後能自行維護~
倘有給您增添煩擾之處~尚請您見諒 !

為避免不同的需求放在同題,而導致問題混淆~再另開題提問如下 :
    http://forum.twbts.com/thread-23412-1-1.html
懇請賜正~謝謝您
作者: samwang    時間: 2021-10-14 07:53

回復 21# ziv976688

已回覆,發現您已修改幾乎快完成了,很棒加油,謝謝。
作者: ziv976688    時間: 2021-10-14 09:23

回復 22# samwang
承您耐心指導~感恩
末學尚待努力中





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