![](/img/trans.png)
[英]Excel VBA: how to rewrite my long FormulaArray code with .replace
[英]Excel VBA FormulaArray Too Slow
我有一個宏,它根據會計期間填充開始日期和完成日期。 例如:產品X在1月12日-12月12日銷售。 該宏將使用vlookup / min數組查找開始,並使用vlookup / max數組查找結束。 日期采用YYYYMM格式,因此vlookup正在查看日歷選項卡,該選項卡將對應的YYYYMM映射到開始或結束日期。 編碼工作正常,但在某些情況下,存在30,000-100,000行,可能需要15-20分鍾才能運行。 是否有人對如何使其運行更快有任何想法?
這是代碼:
Cells(Rcnt,5).FormulaArray =“ = VLOOKUP(MIN(IF('Normalized'!A:A =”&Cells(Rcnt,1).Address(False,False)&“,'Normalized'!J:J )),'Calendar'!A:C,2,FALSE)“
任何幫助將不勝感激。
我對您的問題的理解是,您的數據列出了每個月每個產品的銷售額,因此對於每個產品,您都在搜索前幾個月和最后幾個月。 您可以按產品和日期對數據進行排序嗎? 如Emschorsch所述,這將是實現循環的最簡單方法,因為您一次只能處理一種產品。
嘗試加快速度的其他幾件事:
將代碼的第一行設置為:
Application.Calculation = xlCalculationManual
最后一行是:
Application.Calculation = xlCalculationAutomatic
(您仍然有大量的查詢,但是它們將一次計算全部,而不是在創建每一行的公式時一次計算一次)
如果無法對數據進行排序,則可以連續對每個產品進行自動過濾,並使用SUBTOTAL()函數(引用日期列)來獲取最小值和最大值。 (您可以將SUBTOTAL()公式放在未使用的單元格中,並在您的代碼中引用該單元格,或者使用Application.WorksheetFunction在代碼中直接使用它)
似乎沒有必要的另一部分(如果無法看到您的數據,我們無法確定)是使用查找將YYYYMM轉換為日期,如果這確實是所有日期都采用的格式的話,那么無需使用VBA即可輕松實現DATE()公式,或者如果您需要在宏中使用它:
cells(Rcnt, 5).Value = DateSerial(Left(x, 4), Right(x, 2), 1) 'x is your date in YYYYMM format
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.