2014-11-06 198 views
0

我有一個170000行的範圍。我正在過濾列A的單個值並返回列B中的相應值。SpecialCells(xlCellTypeVisible)不返回所有值到數組(Excel 2013)

我希望將這些值轉儲到數組中,以便我可以快速將它們摺疊成字典(其中鍵是我過濾的值A列)。

問題是SpecialCells(xlCellTypeVisible)行爲不一致。

如果我在較小的範圍內進行相同的測試,那麼值轉儲到數組中就好了。但是,與我的範圍一樣大,它只返回範圍中的第一個值。另外,我可以使用同一行復制到另一張紙上。我只是無法讓它填充數組。

foo = ws1.Range(tbl1Name & "[ID]").SpecialCells(xlCellTypeVisible) 

作品具有小範圍,但在大的範圍內僅返回所述第一結果作爲礦(小於50分的結果。)foo將變成包含所有變量的數組。

ws1.Range(tbl1Name & "[ID]").SpecialCells(xlCellTypeVisible).Copy ws2.Range("A1") 

適用於大範圍併成功複製所有相關數據。

所以我的問題:如何填充數組時沒有額外的步驟複製到空白工作表時自動篩選大型表範圍? (Excel 2013)

+0

你總是可以嘗試一個循環。 – 2014-11-06 16:58:22

+0

我看到循環用於解決以前版本中的行數限制,但根據我讀過的所有內容,我不需要循環。 – spaceNeenja 2014-11-25 17:23:21

回答

0

EDIT:需要引用「Microsoft Forms 2.0 Object Library」(應位於可用引用列表的頂部附近)。或用戶窗體添加到您的項目,並會自動添加引用(那麼你可以刪除表格...)

這應該一列工作:

Sub Tester() 

    Dim rng, txt As String, cb As New DataObject, arr 

    Set rng = ActiveSheet.Range("A2:A28").SpecialCells(xlCellTypeVisible) 

    rng.Copy 
    DoEvents 
    cb.GetFromClipboard 
    txt = cb.GetText 
    arr = Split(txt, vbCrLf) 
    Debug.Print LBound(arr), UBound(arr) 

End Sub 

如果你有多個列你需要循環遍歷arr的每個元素(在選項卡上分割它的值)並將值傳遞給二維數組。

+0

在'代碼'上休息Dim cb As New DataObject,並且我的參考列表中沒有看到Microsoft Forms 2.0 Object Library ... – spaceNeenja 2014-11-25 17:25:38

+0

解決方案是添加一個UserForm,並自動添加引用。 – spaceNeenja 2014-11-25 17:42:53

+0

這工作,如何標記爲答案?謝謝! – spaceNeenja 2014-11-25 17:44:56