是否可以将一定范围的变体转储到工作表中?

我有一个这样的变种

var = sheet1.Range("A1:P3600").Value 

我已经做了一些操作,并将不需要的行推到变体的顶部。 现在我必须从一定范围内将varvariables复制到另一个表单。

 sheet1.range("A3444:P" & i).value = var(range(cells(r,"A").cells(l,"P")) 

也就是说var(350到var结尾)应该被复制到另一个表单中。 可能吗 ? 我们可以这样做吗?

一种方法是将缩小的数组转储到第二个数组,然后将第二个数组转换为您的范围

下面的代码创build了一个3600行×16列的variables数组(即A:P),将数据转储到数组中作为样本数据(注意,您已经将此数组作为Var) ,然后使用variables作为标记来减less将数组写入第二个数组,然后将第二个数组写入范围。

更新以匹配您的确切数据位置。 在你的情况下,你已经有了Var1(你的Var),所以你只需要在lngStop = 350开始的代码的第二部分,并让我的代码Var1引用Var

 Sub TestME() Dim Var1 Dim Var2 Dim lngCnt As Long Dim lngCnt2 As Long Dim lngCnt3 As Long Dim lngCnt4 As Long Dim lngStop As Long Var1 = Sheet1.Range([a1], [p3600]).Value2 For lngCnt = 1 To UBound(Var1, 1) For lngCnt2 = 1 To 16 Var1(lngCnt, lngCnt2) = "I am row " & lngCnt & " column " & lngCnt2 Next lngCnt2 Next lngCnt lngStop = 350 ReDim Var2(1 To UBound(Var1, 1) - lngStop + 1, 1 To UBound(Var1, 2)) For lngCnt3 = lngStop To UBound(Var1, 1) For lngCnt4 = 1 To UBound(Var1, 2) Var2(lngCnt3 - lngStop + 1, lngCnt4) = Var1(lngCnt3, lngCnt4) Next lngCnt4 Next lngCnt3 Sheet1.[a3444].Resize(UBound(Var2, 1), UBound(Var2, 2)).Value2 = Var2 End Sub 

只能将数组的一部分放在表单上,​​但只有在数组的左上方,即只有 n列和 m列。 没有简单的方法来拍打最后 n列和最后 m列。 在这种情况下,你不得不求助于把东西转移到第二个更小的数组,然后把它转储到表单上,就像在@ brettdj的答案中一样 – 这工作正常,但是这有点迂回,对我的口味来说编码太多了。

相反,如果你可以把你的“不需要的行”推到你的数组的底部,那么这将是一个单线程的顶部数组的顶部行到表(省略最后350)。

这是一个例子,其中读入一个4 x 3的数组,只有左上angular的3 x 2被打回到表单上。 秘密就是让目标范围小于整个arrays。

 Dim v v = Range("A2:C5") Range("E2:F4") = v