返回列表 上一主題 發帖

[發問] 誰能幫這幾乎重複動作的VBA瘦身 謝謝

本帖最後由 准提部林 於 2015-8-29 22:48 編輯

Brr(j, 1) >= Arr(k, 2) 基準值(比較點) >= 列之最低價
Brr(j, 1) <= Arr(k, 1) 基準值(比較點) <= 列之最高價
 
結果表a欄因有〔浮點數〕問題,請使用=round(??,2)處理!
 
最低價小于7的只有四筆:第801~804列
2008/10/27        6.68        6.79        6.68
2008/10/28        6.29        6.48        6.23
2008/10/29        6.67        6.67        6.52
2008/10/30        6.50        7.11        6.50
若從2008/11/21(第820列)往下統計,則基準值7以下應都為0,
若從第2列至全部統計,總數為:89502

程式碼並不難,多看幾次應可自行修改!
TEST03v2.rar (162.44 KB)
 

TOP

回復 51# 准提部林
您這次的結果是正確的 我很奇怪不知道我這邊那裏出問題 這次執行的結果又跟您修改過的一樣 我從早上幾乎(只有短暫的離開) 一直坐在電腦前 可能頭腦不清醒了 我頭真的大了 ...
看來還有得忙了  
謝謝您的幫助 我說一下我的內心話 有一些東西對於會的人來說 認為是很淺顯的 但對初接觸者真的是比登天還難 請原諒我的無知 因而造成您的困擾 謝謝您了

TOP

本帖最後由 lcctno 於 2015-8-30 02:24 編輯

回復 46# ML089

感謝版大再次的提醒
我可能因為從昨天6點多弄到現在
已超過20小時未休息
應該老人家精神無法負荷
10幾個檔案在瘦身
應該是忙中有錯
麻煩您看這檔案是否如您告知 及是否已正確的修改了
謝謝您的關愛

我該睡了 晚安

大盤2011-12-19起.rar (120.93 KB)

TOP

回復 51# 准提部林
用您給的檔去試 問題更多 所以我就用我最後經過數位高手指導後所完成的檔案下去加上您那vba工程碼
執行結果還是無法完全吻合 不知道那裏出問題 麻煩高手的您幫忙分析一下
謝謝您的照顧



大盤2011-12-19起.rar (120.93 KB)

TOP

回復 51# 准提部林

抱歉剛剛發現送錯檔了
54樓的不對


    大盤vba2011-12-19起.rar (340.28 KB)

TOP

回復 55# lcctno


〔基準值〕有小數點,很容易造成〔浮點數〕,已告知使用ROUND處理,
例如:公式計算後的數據雖然顯示(看起來)為:0.15,
   按F9檢查,實際為0.149999999,
   有時按F9,仍顯示0.15,有浮點數但肉眼看不出來,(結果表A1917的8550.60,就是這樣),
   往往造成計算的誤差,這是EXCEL的宿命,
   所以,有小數的數據,最好養成習慣加ROUND加工一下~

A3公式改為:
=IF(Data!K$4+Data!L$4*(ROW()-4) > Data!K$2, "", ROUND(Data!K$4+Data!L$4*(ROW()-3),2)) 下刷到底

TOP

回復 56# 准提部林
看來應該是ok了
我之前有試過 ROUND(原來的內容,2) 結果複製到底端空白處 就出問題了
以及 trunc 2位數  結束都是一樣底下部分有亂碼
謝謝您的用心幫助我
請問為何同樣的數字 函數與vba 怎麼會看起是不一樣的比較值
有勞您了 謝謝

TOP

回復 57# lcctno

=ROUND(IF(Data!K$4+Data!L$4*(ROW()-4) > Data!K$2, "", Data!K$4+Data!L$4*(ROW()-3)),2)
這公式到最後會有〔錯誤值#Value〕,是因遇空字符"",又將ROUND放在最外圈,下一式就OK,
=IF(Data!K$4+Data!L$4*(ROW()-4) > Data!K$2, "", ROUND(Data!K$4+Data!L$4*(ROW()-3),2))

excel公式及vba可能用的〔精準度〕不同,所以有時同一數值產生不同結果,
以A1917為例,公式:=IF(Data!K$4+Data!L$4*(ROW()-4) > Data!K$2, "", Data!K$4+Data!L$4*(ROW()-3))

F1917公式:=A1917=8550.6 →結果 TRUE

Sub test()
 MsgBox [結果!A1917] = 8550.6   '→執行結果:FALSE
End Sub

這不是我的專業,恕無法再深入解說~

 

TOP

回復 57# lcctno

計算不一致的地方是 [Data!D4960] 8550.60,比對 [結果!A1917] 的 8550.60
剛好是在比對的 邊界值 而造成浮點算數的問題
假如 VBA 程式的比較式做一個處理就可以了
Sub 分析發生次數()
      Dim Arr, Brr, Cunt&, Crr%(), R&, X&, Y&, TM, j%, k&, SU%
      Const Zero = 0.00000001   '這是一個很小而不影響  "實用上的精度"  的數值
..............
    ..........
  '    If Brr(j, 1) >= Arr(k, 2) Then If Brr(j, 1) <= Arr(k, 1) Then SU = SU + 1
'改為 :
     If Brr(j, 1) >= Arr(k, 2) - Zero Then If Brr(j, 1) <= Arr(k, 1) + Zero Then SU = SU + 1

..................
.........
End sub

以上請參考

TOP

回復 53# lcctno


原來的也是OK,修改一些公式感覺快一些。

大盤2011-12-19起 (ML089).rar (120.57 KB)
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 人要知福、惜福、再造福。
返回列表 上一主題