我尝试尽可能高效地将 4 列加载到数组中。
我试过
dim ar
ar = sheet1.Range("C2:C2681,G2:G2681,J2:J2681,T2:T2681")
但只有第一列被加载到数组中。
我也尝试过
ar = .Range("C2:T" & lastRow)
ar = Application.Index(ar, , Array(1, 5, 19))
但这给了我一个类型不匹配错误。
有什么巧妙的技巧可以达到这个目的吗?
您始终可以将这些列存储在锯齿状阵列,数组的数组。 VBA 中的语法实际上非常简单;你可以存储所有.Value
另一个(之前变暗的)数组内的某个范围(以数组的形式)的 s。
当您使用包含多个子范围(连续或不连续)的范围时,您可以通过循环该范围来单独访问它们.Areas财产.
您唯一需要注意的是索引,因为语法有点奇怪,并且在您的特定示例中,您不会从第一行开始。
Option Explicit
Sub NonContiguousRanges()
Dim rng As Range
Set rng = Range("C2:C20, G2:G20, J2:J20, T2:T20")
Dim jagged As Variant
ReDim jagged(1 To rng.areas.count)
Dim i As Long
For i = 1 To rng.areas.count
jagged(i) = rng.areas(i).Value2
Next i
'=-~ examples of accessing the values ~-='
'first value, C2
MsgBox jagged(1)(1, 1)
'last value, T20
MsgBox jagged(4)(19, 1)
MsgBox jagged(UBound(jagged))(UBound(jagged(UBound(jagged))), 1)
End Sub
我的意思是看看所有这些UBound
s...让我有点头疼,只是把它做好了!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)