Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 转置数组和自动填充_Arrays_Excel_Transpose_Autofill_Vba - Fatal编程技术网

Arrays 转置数组和自动填充

Arrays 转置数组和自动填充,arrays,excel,transpose,autofill,vba,Arrays,Excel,Transpose,Autofill,Vba,我正在寻找一种更有效、更少硬编码的方法,用于转置数组,然后在相邻列中自动填充公式。以下是我当前用于在工作表上的特定位置转置数组并自动填充列的代码: If Len(Join(myArray)) > 0 Then ActiveWorkbook.Sheets("Delta Summary").Range("A3:A" & UBound(myArray) + 2) = WorksheetFunction.Transpose(myArray) ActiveWorkbook.

我正在寻找一种更有效、更少硬编码的方法,用于转置数组,然后在相邻列中自动填充公式。以下是我当前用于在工作表上的特定位置转置数组并自动填充列的代码:

 If Len(Join(myArray)) > 0 Then
    ActiveWorkbook.Sheets("Delta Summary").Range("A3:A" & UBound(myArray) + 2) = WorksheetFunction.Transpose(myArray)
    ActiveWorkbook.Sheets("Delta Summary").Range("B3").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.AutoFill Destination:=Range("B3:K17"), Type:=xlFillDefault
Else: End If
目标是从表“增量汇总”的单元格A3开始转置数组。我的代码实现了这一点,但我想知道是否有更好的方法来实现这一点。作为参考,我循环遍历这个数组,并根据不同的条件对其进行多次转置。我从单元格A3、A20、A37、…、和A224开始转置数组。每个部分有15个分配给数据的单元格

至于自动填充,我想将B:K列中的公式自动填充到A列中预定义范围(例如A3:A17、A20:34等)的最后一个填充单元格。我不知道如何找到预定义范围内最后填充的单元格,因此我对其进行了硬编码

我仍在学习,因此任何见解都将不胜感激

编辑:下面是我用来填充数组的循环条件的一个示例:

ReDim myArray(0)
For i = 1 To LastCurrID
    If ActiveWorkbook.Sheets("Weekly Comparison").Range("N" & i) = "N" And ActiveWorkbook.Sheets("Weekly Comparison").Range("J" & i) = "Billing" Then
    myArray(UBound(myArray)) = ActiveWorkbook.Sheets("Weekly Comparison").Range("A" & i)
    ReDim Preserve myArray(UBound(myArray) + 1)
End If
Next i 
编辑#2:对于那些好奇的人,这里是完整的代码。我只是稍微改变了下面的评论

    ReDim myArray(0)
For i = 1 To LastCurrID
    If wkb.Sheets("Weekly Comparison").Range("N" & i) = "N" And wkb.Sheets("Weekly Comparison").Range("J" & i) = "Billing" Then
        myArray(UBound(myArray)) = wkb.Sheets("Weekly Comparison").Range("A" & i)
        ReDim Preserve myArray(UBound(myArray) + 1)
    End If
Next i

For y = LBound(myArray) To UBound(myArray)
    If Len(Join(myArray)) > 0 Then
        With wks
            .Range("A" & x & ":A" & UBound(myArray) + x - 1) = WorksheetFunction.Transpose(myArray)
            Dim lRow As Long
            lRow = .Range("A" & x).End(xlDown).Row - x + 1
            .Range("B" & x).Resize(1, 10).AutoFill _
                Destination:=.Range("B" & x).Resize(lRow, 10), Type:=xlFillDefault
        End With
    End If
Next
x = x + 17
编辑(基于带循环的OP更新问题) 从构建数组的方式来看,似乎数组正在加载每个范围要复制的数据范围的最后一行(在15行限制内)

下面的命令将再次在数组中循环,并将每个循环的系数设置为17到x(从3开始),并将查找指定范围内从“Bx”开始的最后一行,并使用
.Resize
方法执行
自动填充操作:

'always best to qualify the workbook, worksheet objects with a variable
Dim wkb As Workbook, wks As Worksheet
Set wkb = Workbooks("myWKb")
Set wks = wkb.Sheets("Delta Summary")

Dim x As Long, y As Long
x = 3

For y = LBound(myArray) To UBound(myArray)

    If Len(Join(myArray)) > 0 Then

        With wks

            .Range("A" & x & ":A" & UBound(myArray) + 2) = WorksheetFunction.Transpose(myArray)

            Dim lRow As Long
            lRow = .Range("A" & x).End(xlDown).Row

            .Range("B" & x).Resize(1, 10).AutoFill _
                Destination:=.Range("B" & x).Resize(lRow, 10), Type:=xlFillDefault

        End With

    End If

    x = x + 17

Next

查找最后一个单元格。如果我没有弄错的话,您链接的方法假设数据从列中的单元格1开始,没有任何标题将其拆分。在给定的示例中,LastRow=.Range(“E”&.Rows.Count).End(xlUp).Row将只查找所有列E中的最后一个单元格,而不是特定的范围。您说过
我想自动填充列B:K中的公式,直到列a中最后填充的单元格
,因此您可以使用链接上的方法查找列a中的最后一行,然后填充到
范围(“B3:K”和lastrow)
作为参考,我在这个数组中循环…
你能不能也包括代码的循环部分?以及定义标准的部分?我想我可以帮你解决你的问题,但是有循环和标准部分将帮助我确定使它工作的变量。@ScottCraner你留下了最重要的部分我说的是“在A列中为预定义范围(例如A3:A17)最后填充的单元格。”因此,我想在单元格A3:A17之间找到上次填充的单元格。很抱歉,如果我造成了混乱,我无法将代码很好地粘贴到注释中,因此我使用循环条件编辑了我的原始问题。嘿,斯科特,非常感谢你的解决方案。它的工作原理是一个警告:它似乎总是在最后填充的单元格后面自动填充两行列A。我操纵了我的数据(2个条目,5个条目,等等),它总是从我的vlookups中给我两行额外的#N/A。你知道为什么会发生这种情况吗?另外,我对Resize属性不太熟悉。如果我理解正确,它会从B3:K3(10列)中获取数据调整行的大小,使之等于
lRow
返回的行。我的理解正确吗?你的理解在@kschindl上是正确的。我也只是用wks
更新了
下的第一行。我以前没有把变量放在那里,现在我放了,所以一定要使用更新后的代码。对于两个额外的单元格,你能删除+2 I吗在
UBound(myArray)+2)
语句中,或者您需要它吗?如果确实需要,则将
lRow
行更改为
lRow=.Range(“A”&x).End(xlDown).Row-2