在excel中创build非连续区域的“值”数组的最佳方法是什么?

我已经查看了vba Union方法,但是该示例仅显示如何将公式应用于这些范围。 每次我尝试将这些范围复制到一个数组中,我最终只有一些列。 我正在这样做:

Dim aRng As Range: Set aRng = wbkFirstfile.Sheets(1).Range("H2:H" + CStr(lastRow)) Dim bRng As Range: Set bRng = wbkFirstfile.Sheets(1).Range("P2:P" + CStr(lastRow)) Dim cRng As Range: Set cRng = wbkFirstfile.Sheets(1).Range("Q2:Q" + CStr(lastRow)) Dim dRng As Range: Set dRng = wbkFirstfile.Sheets(1).Range("U2:U" + CStr(lastRow)) Dim eRng As Range: Set eRng = wbkFirstfile.Sheets(1).Range("V2:V" + CStr(lastRow)) Dim fRng As Range: Set fRng = wbkFirstfile.Sheets(1).Range("W2:W" + CStr(lastRow)) Dim uRng As Range: Set uRng = Union(aRng, bRng, cRng) Dim uRng2 As Range: Set uRng2 = Union(dRng, fRng) 

这只适用于6列中的3个,即使当我尝试直接访问它,例如区域(3).cells(r,c)等…我得到一个应用程序定义的错误。

UPDATE
我也更新了uRng:

 Dim uRng As Range: Set uRng = Union(aRng, bRng, cRng, dRng, eRng, fRng) 

我试图访问它:

 MsgBox uRng2.Areas(1).Cells(2, 1) 

要么

 MsgBox uRng2.Areas(2).Cells(2, 1) 

要么

 MsgBox uRng2.Areas(3).Cells(2, 1) 

它工作得很好….区域3(我认为有6个地区)之后的任何东西导致应用程序定义的错误。

有什么想法吗?

既然你只需要一个值的数组,你可以使用Index和一些数组参数:

 Dim v With wbkFirstfile.Sheets(1).Range("H2:W" & lastRow) v = Application.Index(.Value2, .Worksheet.Evaluate("ROW(" & .Columns(1).Address & ")-1"), Array(1, 9, 10, 15, 16)) End With 

Evaluate部分创build一个“行”索引(从1到n)的数组,最后一个数组是所需列的索引(相对于范围,所以H是第1列)。