Board logo

標題: [發問] 檔案過大~函數有沒有辦法轉成VBA [打印本頁]

作者: gn00487767    時間: 2014-2-13 23:19     標題: 檔案過大~函數有沒有辦法轉成VBA

本帖最後由 GBKEE 於 2014-2-14 06:51 編輯

請問各位大大們
此附件中函數有沒有辦法轉成VBA

因為資料太多如果全部都用函數顯示檔案大到很難開啟
有想過用巨集錄製的方式
但是函數沒辦法錄製

小弟真的很頭疼
煩請有空的大大們幫幫小弟囉
作者: Hsieh    時間: 2014-2-14 10:03

回復 1# gn00487767

一鍵搞定
  1. Private Sub CommandButton2_Click()
  2. Dim Ar()
  3. With Sheets("名單")
  4.    For Each a In .Range(.[E2], .[E2].End(xlDown)).SpecialCells(xlCellTypeConstants)
  5.       ReDim Preserve Ar(s)
  6.       n = Application.HLookup(a, Array(Array("第一類", "第二類", "第三類", "第四類", "第五類"), Array(5, 3, 1, 0, 8)), 2, 0)
  7.       y = DateAdd("m", n, a.Offset(, 1))
  8.       Ar(s) = Array(y, n, IIf(Date > y, "有效", "無效"))
  9.       s = s + 1
  10.     Next
  11. End With
  12. ay = Application.Transpose(Application.Transpose(Ar))
  13. With Sheets("驗證")
  14. .Range(.[B2], .[B2].End(xlDown)).ClearContents
  15. .[B2].Resize(s, 1) = Application.Index(ay, , 1)
  16. .Range(.[E2], .[E2].End(xlDown)).ClearContents
  17. .[E2].Resize(s, 1) = Application.Index(ay, , 2)
  18. End With
  19. With Sheets("結果")
  20. .Range(.[B2], .[B2].End(xlDown)).ClearContents
  21. .[B2].Resize(s, 1) = Application.Index(ay, , 3)
  22. End With
  23. End Sub
複製代碼

作者: GBKEE    時間: 2014-2-14 11:04

回復 1# gn00487767
  1. Sub Ex() '"名單"上F欄的日期加上E欄月數的日期
  2.     With Sheets("驗證").[B2:B20]
  3.         .Cells = "=EDATE(名單!RC6,RC5)"
  4.         '=EDATE(名單!F2,E2)
  5.         .Cells = .Value '公式轉成值
  6.     End With
  7. End Sub
  8. Sub Ex1()  '算出"名單"上E欄的數值
  9.     With Sheets("驗證").[E2:E20]
  10.         .Cells = "=CHOOSE(MATCH(CLEAN(名單!RC5),{""第一類"",""第二類"",""第三類"",""第四類"",""第五類""},0),5,3,1,0,8) " '=EDATE(名單!F2,E2)
  11.                  '=CHOOSE(MATCH(CLEAN(名單!$E2),{"第一類","第二類","第三類","第四類","第五類"},0),5,3,1,0,8)
  12.         .Cells = .Value '公式轉成值
  13.     End With
  14. End Sub
  15. Sub Ex2()  '當天的日期大於"驗證"上B欄的日期的結果
  16.     With Sheets("結果").[B2:B20]
  17.         .Cells = "=IF(TODAY()>驗證!RC2,""有效"",""無效"")"
  18.         '=IF(TODAY()>驗證!B2,"有效","無效")
  19.         .Cells = .Value '公式轉成值
  20.     End With
  21. End Sub
複製代碼

作者: gn00487767    時間: 2014-2-14 17:25

回復 2# Hsieh


  萬分感謝GBKEE大大
小弟測試結果,成功減少檔案過大讀取時間太長的問題
作者: gn00487767    時間: 2014-2-14 17:31

回復 3# GBKEE

再次詢問 GBKEE 大大
您第一次給小弟的代碼
單一個複製使用可行
但第二次的代碼
單獨複製代碼無法使用
但是兩者一同複製代碼一同使用卻可以
但是結果好像都是相同的
那小弟如果要新增或減少東西該用哪個方式
進行使用
作者: GBKEE    時間: 2014-2-14 20:19

回復 5# gn00487767
請附檔說明你的疑問
作者: gn00487767    時間: 2014-2-15 23:36

回復 6# GBKEE

感謝GBKEE大大
是小弟自己糊塗
原來2者皆相同
只是第二次的代碼是直接驗算的
小弟沒問題了
後續小弟再自行研究研究
謝謝大大
作者: gn00487767    時間: 2014-2-16 01:00

回復  gn00487767
GBKEE 發表於 2014-2-14 11:04


請教大大
小弟發現這次的代碼有誤呢
驗證後顯示的日期是顛倒的
所以驗證完全不行
作者: gn00487767    時間: 2014-2-17 00:43

回復 3# GBKEE

再次請教GBKEE大大
其中
08.Sub Ex1()  '算出"名單"上E欄的數值
09.    With Sheets("驗證").[E2:E20]
10.        .Cells = "=CHOOSE(MATCH(CLEAN(名單!RC5),{""第一類"",""第二類"",""第三類"",""第四類"",""第五類""},0),5,3,1,0,8) " '=EDATE(名單!F2,E2)
11.                 '=CHOOSE(MATCH(CLEAN(名單!$E2),{"第一類","第二類","第三類","第四類","第五類"},0),5,3,1,0,8)
12.        .Cells = .Value '公式轉成值
13.    End With
它顯示出來的日期跟我的日期格式是顛倒的
所以驗證結果都是錯誤的
小弟應該如何做修改
煩請大大費心
作者: gn00487767    時間: 2014-2-17 01:16

回復 3# GBKEE

GBKEE大大抱歉小弟看錯了
應該是下面才對
        With Sheets("驗證").[B2:B20]
        .Cells = "=EDATE(名單!F2,驗證!E2)"
        '=EDATE(名單!F2,E2)
        .Cells = .Value '公式轉成值
    End With
這邊驗證後的日期格式是顛倒的
作者: GBKEE    時間: 2014-2-17 06:16

回復 10# gn00487767
這程式執行後的日期正確嗎?
程式沒有修改日期格式,無關乎你驗證工作表的日期格式,
作者: gn00487767    時間: 2014-2-17 12:12

本帖最後由 gn00487767 於 2014-2-17 12:16 編輯

回復 11# GBKEE

這程式執行後的日期正確嗎?
執行後的日期是正確的沒錯
但是原本應該是 2014/03/01 變成了3/1/2014 所以導致驗證全部變成無效
但是 第一位大大給小弟的代碼 是可行的
只是第一次的代碼小弟真的無法理解再作修改
第二次的代碼(即此次發生錯誤的代碼)因為是分開的而且您有附加說明
所以小弟能自行修改 所以才想套用您給小弟的代碼
或是大大能把第一位大大給的代碼分段和附加說明嗎
勞煩大大了
作者: GBKEE    時間: 2014-2-17 12:45

回復 12# gn00487767
   
2014/03/01 變成了3/1/2014 所以導致驗證全部變成無效
但還是日期格式,不會導致驗證全部變成無效.
附上檔案看看
作者: gn00487767    時間: 2014-2-17 13:38

回復 13# GBKEE


小弟測試結果
如果把公式轉成值都拿掉
就恢復正常
都加上公式轉成值就會變成全都無效   
但如果公式不拿掉檔案還是那麼大
作者: GBKEE    時間: 2014-2-17 13:56

回復 14# gn00487767
你也是2003版嗎? 沒你說的問題,也沒有 2014/03/01 變成了3/1/2014
作者: gn00487767    時間: 2014-2-17 14:20

回復 15# GBKEE

是的小弟是2003版的
您的也是嗎
可是小弟這邊看
怎麼原本的資料是20XX/03/01
驗證那邊加上月數的日期變成 03/01/20XX
然後結果那邊就全部無效了
作者: gn00487767    時間: 2014-2-17 14:28

回復 15# GBKEE

感謝大大
小弟發現了另一個方式了
就是把我原有的函數全部套用您給小弟的代碼
    With Sheets("XX").[X?:X?]
        .Cells = "   原有函數(只是原有的"X"要變成" "X" ")   "   
        .Cells = .Value '公式轉成值
    End With
這樣的方式還是能把檔案縮小^^




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