標題:
[發問]
檔案過大~函數有沒有辦法轉成VBA
[打印本頁]
作者:
gn00487767
時間:
2014-2-13 23:19
標題:
檔案過大~函數有沒有辦法轉成VBA
本帖最後由 GBKEE 於 2014-2-14 06:51 編輯
請問各位大大們
此附件中函數有沒有辦法轉成VBA
因為資料太多如果全部都用函數顯示檔案大到很難開啟
有想過用巨集錄製的方式
但是函數沒辦法錄製
小弟真的很頭疼
煩請有空的大大們幫幫小弟囉
作者:
Hsieh
時間:
2014-2-14 10:03
回復
1#
gn00487767
一鍵搞定
Private Sub CommandButton2_Click()
Dim Ar()
With Sheets("名單")
For Each a In .Range(.[E2], .[E2].End(xlDown)).SpecialCells(xlCellTypeConstants)
ReDim Preserve Ar(s)
n = Application.HLookup(a, Array(Array("第一類", "第二類", "第三類", "第四類", "第五類"), Array(5, 3, 1, 0, 8)), 2, 0)
y = DateAdd("m", n, a.Offset(, 1))
Ar(s) = Array(y, n, IIf(Date > y, "有效", "無效"))
s = s + 1
Next
End With
ay = Application.Transpose(Application.Transpose(Ar))
With Sheets("驗證")
.Range(.[B2], .[B2].End(xlDown)).ClearContents
.[B2].Resize(s, 1) = Application.Index(ay, , 1)
.Range(.[E2], .[E2].End(xlDown)).ClearContents
.[E2].Resize(s, 1) = Application.Index(ay, , 2)
End With
With Sheets("結果")
.Range(.[B2], .[B2].End(xlDown)).ClearContents
.[B2].Resize(s, 1) = Application.Index(ay, , 3)
End With
End Sub
複製代碼
作者:
GBKEE
時間:
2014-2-14 11:04
回復
1#
gn00487767
Sub Ex() '"名單"上F欄的日期加上E欄月數的日期
With Sheets("驗證").[B2:B20]
.Cells = "=EDATE(名單!RC6,RC5)"
'=EDATE(名單!F2,E2)
.Cells = .Value '公式轉成值
End With
End Sub
Sub Ex1() '算出"名單"上E欄的數值
With Sheets("驗證").[E2:E20]
.Cells = "=CHOOSE(MATCH(CLEAN(名單!RC5),{""第一類"",""第二類"",""第三類"",""第四類"",""第五類""},0),5,3,1,0,8) " '=EDATE(名單!F2,E2)
'=CHOOSE(MATCH(CLEAN(名單!$E2),{"第一類","第二類","第三類","第四類","第五類"},0),5,3,1,0,8)
.Cells = .Value '公式轉成值
End With
End Sub
Sub Ex2() '當天的日期大於"驗證"上B欄的日期的結果
With Sheets("結果").[B2:B20]
.Cells = "=IF(TODAY()>驗證!RC2,""有效"",""無效"")"
'=IF(TODAY()>驗證!B2,"有效","無效")
.Cells = .Value '公式轉成值
End With
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/)