返回列表 上一主題 發帖

[發問] 檔案過大~函數有沒有辦法轉成VBA

[發問] 檔案過大~函數有沒有辦法轉成VBA

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

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

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

小弟真的很頭疼
煩請有空的大大們幫幫小弟囉

函數換成vba.rar (9.51 KB)

回復 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
複製代碼
學海無涯_不恥下問

TOP

回復 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
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# Hsieh


  萬分感謝GBKEE大大
小弟測試結果,成功減少檔案過大讀取時間太長的問題

TOP

回復 3# GBKEE

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

TOP

回復 5# gn00487767
請附檔說明你的疑問
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# GBKEE

感謝GBKEE大大
是小弟自己糊塗
原來2者皆相同
只是第二次的代碼是直接驗算的
小弟沒問題了
後續小弟再自行研究研究
謝謝大大

TOP

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


請教大大
小弟發現這次的代碼有誤呢
驗證後顯示的日期是顛倒的
所以驗證完全不行

TOP

回復 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
它顯示出來的日期跟我的日期格式是顛倒的
所以驗證結果都是錯誤的
小弟應該如何做修改
煩請大大費心

TOP

回復 3# GBKEE

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

TOP

        靜思自在 : 稻穗結得越飽滿,越會往下垂,一個人越有成就,就要越有謙沖的胸襟。
返回列表 上一主題