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

时间:2011-10-03 07:07:33

标签: excel excel-vba vba

我有这样的变种

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

我做了一些操作,并将不需要的行推到了变体的顶部。现在我必须将var变体复制到某个范围内的另一个工作表。

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

即var(350到var的结尾)应该复制到另一个工作表。可能吗 ?我们能这样做吗?

2 个答案:

答案 0 :(得分:2)

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

下面的代码生成一个3600行乘16列(即A:P)的变量数组,数据被转储到数组中以获取样本数据(注意你已将此数组作为Var),然后将变量用作标记以将数组减少到第二个数组,然后将第二个数组写入范围。

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

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

答案 1 :(得分:1)

可以只将一部分数组打到工作表上,但前提是该部分位于数组的左上角,即只有第一个 {{ 1}}列和第一个 n行。没有简单的方法来拍打最后 m列和最后 n行。在这种情况下,你不得不求助于将东西转移到第二个较小的数组,然后将其转储到工作表上,就像在@ brettdj的答案中一样 - 这很好用,但它有点迂回,而且编码太多我的口味。

相反,如果您可以将“不需要的行”向下推到数组的底部,那么将该数组的顶行打到一张纸上(省略最后一行350)将是一个单行。

这是一个读入4 x 3阵列的示例,只有左上角的3 x 2被打回到纸张上。秘诀是使目标范围小于整个阵列。

m