返回列表 上一主題 發帖

[發問] 公式程式碼化

回復 13# n7822123
標示底色_n7822123.rar (101.78 KB)
不好意思,可否請您幫我看一下~
只執行"標示底色"很OK(不到2秒),
但如果再加上"餘數登錄"~ 測試N次,卻都要跑30秒上下~
為什麼會跑的這麼異常的慢 ?
是2003版本的關係嗎?
能改善嗎?
謝謝您

TOP

回復 26# ziv976688

版面的設定,應該是放到最後面,順序如下

資料
計算
排版
列印
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 25# ML089
我還沒有注意到準7進8 的 V2:AB2 資料有誤
改為陣列.....修改後在執行看看~
4樓的貴解沒有看到修改的地方。
請教您 : 應該怎麼改?
謝謝您
PS : 不是我的電腦有問題就OK了~幾秒都沒有關係

DATA!VB 下列放置位置應該在 迴圈之外
那版面的設定不就失效了

我自己先研習一下
不好意思事事麻煩您。
明天再說!
晚安!

TOP

回復 17# ziv976688

問題1:DATA!VB 下列放置位置應該在 迴圈之外
    For s = 1 To 6   '6個工作表
        Shrr = Array("準2進3", "準3進4", "準4進5", "準5進6", "準6進7", "準7進8")
.
.
    NEXT
            'Call 參數登錄
            Call 餘數登錄
            Call 餘數各取1
            Call 標示底色

    問題2: "準7進8" 做出來的資料有誤,你再查看看
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 17# ziv976688

我執行是還好4.5秒完成,當然改為陣列

準7進8 的 V2:AB2 資料有誤,你修改後在執行看看
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 21# n7822123
謝謝n大您的回覆~瞭解了

TOP

本帖最後由 ziv976688 於 2021-7-25 22:22 編輯

回復 20# singo1232001
謝謝S大您的詳細說明~
我研讀後~有問題再向您請教。
謝謝您

TOP

回復 16# ziv976688


   是儲存格裡面的數字喔~~Num只是個變數名稱而已
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 singo1232001 於 2021-7-25 21:34 編輯
回復  n7822123
測試成功
謝謝您的幫忙和指導~感恩

不好意思,請教一下 :
  列 ...
ziv976688 發表於 2021-7-25 19:45


不好意思,請教一下 :
  列8
  For Each Num In Split(Arr(2)(R, C), ",")
      餘數 = (Arr(1)(R, C) + Num - 1) Mod 49 + 1
請問 :
Num是指填入控制箱的期距數  Num = "25" 嗎?
還是只是變數 ?
謝謝您
'------------------------------------------
幫忙解讀一下
這段是縮寫
需要先拆分
並且先從split的基礎運用方式 先學
x=Split(Arr(2)(R, C), ",")
要先了解這段的意思
就必須先了解
Arr(2)(R, C)
又是甚麼意思
Arr(1) 跟arr(2)
你就想像成 兩個虛擬的工作表 (實際名稱 "陣列")
所以
Arr(2)(R,C)
就代表在第二張虛擬工作表的 某個儲存格因為有R列C欄值
因為在陣列中 處理速度比較快 也比較單純
依照準2進3工作表[V2]匯入當前Arr(2)虛擬工作表的位置
最終 就能取得一組字串 比如 "8,27"
位置應該是Arr(2)陣列的(0,0)

那麼我們回到
x=Split(Arr(2)(R, C), ",")
意思就是
x=Split("8,27", ",")
這是一種你給他分隔值 她就幫你依照分隔值 切分的函數 並且會個別存放
如上的意思
我將8,27 依照","符號 切分
最後我會得到
8 與27兩個值  
分別放在
x(0)  <-裡面是8
x(1)  <-裡面是27
的�堶�
如果你給他的字串是5,4,3,2
那麼你就會得到
x(0) <-裡面是5
x(1) <-裡面是4
x(2) <-裡面是3
x(3) <-裡面是2

如上述 如果想要取得x(1)資料
我們就可以
y=x(1)
那麼y的值就是4

接著講
迴圈分兩種
for i = 1 to 4  這代表這回圈是 1 2 3 4
另一種是
for each a In x
這概念不同的地方很簡單

假設 現在面前有40個大頭兵 他們是A班
第一種就是 你說1號 他出來1號
而且 你必須確認裡面有多少人 才不會漏報 或者多報
第二種則是 你說 A班報數
這種方式 就不用知道這班有多少人存在
也就是 就從當前的順位第一個 到最後一個 一個一個自己站出來

這樣我們就能了解第一段
  For Each Num In Split("8,27", ",")

我們要裡面的 8,27 輪流站進去Num裡面
方便我們後續使用

當8進去Num之後
      餘數 = (Arr(1)(R, C) + Num - 1) Mod 49 + 1
我們繼續執行上面這段
Arr(1)(R,C) 是工作表上M2的位置 也就是11
最後就變成
餘數 = (11+8-1) mod 49 +1
最後答案
餘數= 18+1

然後 在進行下一個 27站出來
餘數 = (11+27-1) mod 49 +1
餘數= 38
最後再把 19跟38結合一起
就會變成
19,38

TOP

回復 18# singo1232001
測試成功
謝謝您的幫忙和指導~感恩

TOP

        靜思自在 : 為人處世要小心細心,但不要「小心眼」。
返回列表 上一主題