我有一個Excel電子表格,其中包含兩個名爲「Cities」和「Data」的工作表。 「數據」頁面包含108264行數據,列一直向上到列AT。陣列公式到VBA
在城市工作表下,我有一個從B4到B214行的210個城市的列表。在它旁邊(C欄)列出了每個城市使用的代碼計數(即該城市使用了多少代碼)。接下來的20列(D列到W列)應該顯示每個城市最常用的代碼序列(即最不常見的共同代碼)。我附上了帶有樣本僞數據集的圖像,以提供我所指的內容的圖形表示。
如果你看市「1」,例如(行4「城市」),你會發現它有5計數,以及最常用的代碼5,然後是4,然後是3,然後是2,最後是1.如果您參考「數據」圖像,則可以看到相關性。
我已經用於該樣本集的陣列式如下:
在 「城市」
{=IFERROR((MODE(IF(ISNUMBER(SEARCH(B4,Data!$B2:$B6)),IF(ISNUMBER(Data!$K2:$AT6),Data!$K2:$AT6)))),"")}
在 「城市」
{=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的D4然後我從E4開始拖動公式,並根據前一列中的數據自動計算常用代碼的頻率。
目標是:每個城市在「城市」工作表中所指出的,我想從「數據」工作表搜索列B和列K至AT返回那些20個最常用的密碼。因此,它會查看B列中的城市,然後查看列K到AT中常用的代碼。
我確實有兩個數組公式用於計算最常用的代碼,比取決於前一列中的值,返回下一個最常用的代碼。問題是,由於這樣一個大的數據集,爲每個單元格創建一個數組公式會耗費大量時間,並會顯着降低Excel電子表格的速度。
所以,這是我到目前爲止已經試過:
- 數組公式(請參閱隨附表)
- 以下VBAS。第一個返回運行時錯誤'1004'無法設置範圍類的FormulaArray屬性,而第二個不執行任何操作。
任何建議或幫助,無論是加快陣列公式,或相應地修改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
謝謝。這非常有用。 – user2722253
**可讀性提示**:四則引號是可怕的 - 當指定一個複雜的公式時,您會*弄錯它們,並且調試它需要很長時間。所以試試這個:'公共常量QQ作爲字符串* 2 =「」「」'將雙引號放入引用的字符串中,並將其用作'strFormula = QQ&「Today =」&QQ&「&DATE() 「......就是這樣,或者Chr(34) –