[英]Array formula to VBA
我有一個Excel電子表格,其中包含兩個名為“Cities”和“Data”的工作表。 “數據”頁面包含108264行數據,列一直向上進行到列AT。
在城市工作表下,我列出了從B4到B214行的210個城市。 旁邊(C列)是每個城市使用的代碼計數列表(即該城市使用的代碼數量)。 接下來的20列(列D到W)應該顯示每個城市最常用代碼的序列(即最常見到最不常見的代碼)。 我用樣本偽數據集包含了圖像,以提供我所指的內容的圖形表示。
如果您將查看City“1”(例如第4行“城市”),您會注意到它的計數為5,最常用的代碼是5,然后是4,然后是3,然后是2,最后是1。如果您參考“數據”圖像,則可以看到相關性。
我用於此示例集的數組公式如下:
在“城市”的D4
{=IFERROR((MODE(IF(ISNUMBER(SEARCH(B4,Data!$B2:$B6)),IF(ISNUMBER(Data!$K2:$AT6),Data!$K2:$AT6)))),"")}
在“城市”的E4
{=IFERROR(MODE(IFERROR(SMALL(IF(ISNUMBER(SEARCH($B$4, Data!$B2:$B6))*ISNUMBER(1/Data!$K2:$AT6)*ISNA(MATCH(Data!$K2:$AT6,$D4:D4,0)),Data!$K2:$AT6,""),ROW(INDEX($A:$A,1):INDEX($A:$A,COUNT(Data!$K2:$AT6)))),"")),"")}
然后我從E4開始拖動公式,它會根據前一列中的數據自動計算常用代碼的頻率。
目標是:對於“城市”工作表中記錄的每個城市,我想通過從“數據”工作表中搜索列B和列K到AT來返回這20個最常用的代碼。 因此,它將在B列中查找該城市,然后查看K列到AT中常用的代碼。
我有兩個用於此的數組公式(即計算最常用的代碼,而不是依賴於前一列中的值,返回下一個最常用的代碼)。 問題是,由於這么大的數據集,為每個單元格創建一個數組公式變得非常耗時,並且大大減慢了Excel電子表格的速度。
所以,這是我到目前為止所嘗試的:
任何有關加速數組公式或相應修改VBA的建議或幫助都將非常感激。 如果您還有備用VBA,那也值得贊賞。
謝謝。
Sub Option1()
Dim r As Long
For r = 4 To 214
Sheet2.Cells(r, 210).FormulaArray = _
"=IFERROR((MODE(IF(ISNUMBER(SEARCH(C" & CStr(r) & ", Data!$B$2:$B$108264)),IF(ISNUMBER(Data!$K2:$AT108264),Data!$K2:$AT108264)))),"")"
Next r
End Sub
Sub Option2()
Sheet1.Range("C4").FormulaArray = _
"=IFERROR((MODE(IF(ISNUMBER(SEARCH(C4, Data!$B$2:$B$108264)),IF(ISNUMBER(Data!$K2:$AT108264),Data!$K2:$AT108264)))),"")"
Sheet1.Range("D4:D214").FillDown
End Sub
第一個提示:
在你的兩個VBA公式的末尾,你有""
:
...Data!$K2:$AT108264)))),"")"
在VBA中,如果要在公式中包含引號,則應使用double qoutes: """"
而不是""
。
第二個提示:
無需使用循環將公式應用於范圍中的每個單元格:
For r = 4 To 214
Sheet2.Cells(r, 210).FormulaArray = "=IFERROR(...C4,...)"
Next r
您的代碼會更快 ,如果你會使用(列№ 210
是HB
):
Sheet2.Range("HB4:HB214").FormulaArray = "=IFERROR(...C4,...)"
此方法將自動調整公式中的所有相對/混合引用:
HB4
你會有=IFERROR(...C4,...)
HB5
你會有=IFERROR(...C5,...)
HB214
你會有=IFERROR(...C214,...)
所以,工作代碼將是:
Sheet2.Range("HB4:HB214").FormulaArray = "=IFERROR((MODE(IF(ISNUMBER(SEARCH(C4, Data!$B$2:$B$108264)),IF(ISNUMBER(Data!$K2:$AT108264),Data!$K2:$AT108264)))),"""")"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.