Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 转置函数的限制_Excel_Vba - Fatal编程技术网

Excel 转置函数的限制

Excel 转置函数的限制,excel,vba,Excel,Vba,我试图找到一个解决办法,因为转置将不适合我的数据大小,这给了我一个错误。我应该在循环结束之前(下一个循环之前)添加什么,以便将数据粘贴到新的工作表上?如果输出为100000行,这会降低宏的速度吗 在查看代码后,我意识到如果我将范围设置为某个数字,它将工作,然后再设置+1行,它将出错。结果是转置是罪魁祸首 For Q = 1 To Data + 1 n = n + 1 ReDim Preserve var(1 To 3, 1

我试图找到一个解决办法,因为转置将不适合我的数据大小,这给了我一个错误。我应该在循环结束之前(下一个循环之前)添加什么,以便将数据粘贴到新的工作表上?如果输出为100000行,这会降低宏的速度吗

在查看代码后,我意识到如果我将范围设置为某个数字,它将工作,然后再设置+1行,它将出错。结果是转置是罪魁祸首

  For Q = 1 To Data + 1

                n = n + 1

                ReDim Preserve var(1 To 3, 1 To n)
                var(1, n) = 

                For R = 2 To 6
                    var(r, n) = 
                Next R
                var(1, n) = 
                var(2, n) = 
            Next Q

Next_Loop:
        Next P

        With this workbook.sheet1
            If Q>= 2 Then
               .Range("a1").Resize(n, 6) = WorksheetFunction.Transpose(var)
            End If
结果应该是在每次迭代后粘贴数据(除非它减慢宏的速度),而不是在最后粘贴所有数据。下一次迭代将在前一行数据的下方。等等


感谢您提供的任何见解

这里有一个选项供您尝试

Sub LongColumnToAFewColumns()
    Dim wsF As Worksheet, WST As Worksheet
    Dim rf As Range, rT As Range
    Dim R As Long, j As Integer

    ' initialize
    Set wsF = ActiveSheet
    Set WST = Sheets.Add
    WST.Name = "Results"

    j = 1

    For R = 1 To wsF.Cells(Rows.Count, 1).End(xlUp).Row Step 65536
        wsF.Cells(R, 1).Resize(65536).Copy
        WST.Cells(j, 1).PasteSpecial xlPasteValues

WST.Cells(j, 1).PasteSpecial xlPasteValues

        j = j + 1
    Next R

End Sub
如果希望将一个长列剪切成几行,请使用此选项

Sub LongColumnToAFewRows()
    Dim wsF As Worksheet, WST As Worksheet
    Dim rf As Range, rT As Range
    Dim R As Long, j As Integer

    ' initialize
    Set wsF = ActiveSheet
    Set WST = Sheets.Add
    WST.Name = "Results2"

    j = 1

    For R = 1 To wsF.Cells(Rows.Count, 1).End(xlUp).Row Step Columns.Count
        wsF.Cells(R, 1).Resize(Columns.Count).Copy
        WST.Cells(j, 1).PasteSpecial xlPasteValues, Transpose:=True
        j = j + 1
    Next R

End Sub
还有一个供考虑

Sub testing()
 Dim wsSource As Worksheet
 Dim wsDest As Worksheet
 Dim ptrSource As Long
 Dim ptrDest As Long
 Dim colDest As Long

    Set wsDest = Sheets.Add
    wsDest.Name = "Results"
    Set wsSource = Worksheets("Sheet1")

    colDest = 1
    ptrSource = 1
    ptrDest = 1
    Do While Len(wsSource.Cells(ptrSource, 1)) > 0
        wsDest.Cells(ptrDest, colDest) = wsSource.Cells(ptrSource, 1)
            If colDest = Columns.Count Then
                colDest = 0
                ptrDest = ptrDest + 1
            End If
        ptrSource = ptrSource + 1
        colDest = colDest + 1
    Loop
    Set wsDest = Nothing
    Set wsSource = Nothing

End Sub

这里有一个供您尝试的选项

Sub LongColumnToAFewColumns()
    Dim wsF As Worksheet, WST As Worksheet
    Dim rf As Range, rT As Range
    Dim R As Long, j As Integer

    ' initialize
    Set wsF = ActiveSheet
    Set WST = Sheets.Add
    WST.Name = "Results"

    j = 1

    For R = 1 To wsF.Cells(Rows.Count, 1).End(xlUp).Row Step 65536
        wsF.Cells(R, 1).Resize(65536).Copy
        WST.Cells(j, 1).PasteSpecial xlPasteValues

WST.Cells(j, 1).PasteSpecial xlPasteValues

        j = j + 1
    Next R

End Sub
如果希望将一个长列剪切成几行,请使用此选项

Sub LongColumnToAFewRows()
    Dim wsF As Worksheet, WST As Worksheet
    Dim rf As Range, rT As Range
    Dim R As Long, j As Integer

    ' initialize
    Set wsF = ActiveSheet
    Set WST = Sheets.Add
    WST.Name = "Results2"

    j = 1

    For R = 1 To wsF.Cells(Rows.Count, 1).End(xlUp).Row Step Columns.Count
        wsF.Cells(R, 1).Resize(Columns.Count).Copy
        WST.Cells(j, 1).PasteSpecial xlPasteValues, Transpose:=True
        j = j + 1
    Next R

End Sub
还有一个供考虑

Sub testing()
 Dim wsSource As Worksheet
 Dim wsDest As Worksheet
 Dim ptrSource As Long
 Dim ptrDest As Long
 Dim colDest As Long

    Set wsDest = Sheets.Add
    wsDest.Name = "Results"
    Set wsSource = Worksheets("Sheet1")

    colDest = 1
    ptrSource = 1
    ptrDest = 1
    Do While Len(wsSource.Cells(ptrSource, 1)) > 0
        wsDest.Cells(ptrDest, colDest) = wsSource.Cells(ptrSource, 1)
            If colDest = Columns.Count Then
                colDest = 0
                ptrDest = ptrDest + 1
            End If
        ptrSource = ptrSource + 1
        colDest = colDest + 1
    Loop
    Set wsDest = Nothing
    Set wsSource = Nothing

End Sub

将数组设置为2d数组
Dim var(1到x,1到1)
其中x是所需的行数。然后,您可以避免使用转置。共有16384列,因此转置次数最多。创建函数以返回转置版本的
var
-只需调整新数组的大小并使用嵌套循环复制值。请向我们展示如何分配
var
(即
ReDim
语句,或赋值
var=Range().Resize().Value
)您好,我更新了代码块,但我想我需要制作女贞子来解决这个问题。不知道如何编写。请将数组设置为2d数组
Dim var(1到x,1到1)
其中x是所需的行数。然后可以避免使用转置。共有16384列,因此转置不能超过此数。创建函数以返回转置版本的
var
-只需调整新数组的大小并使用嵌套循环复制值。请向我们展示如何分配
var
(即
ReDim
语句,或赋值
var=Range().Resize().Value
)您好,我更新了代码块,但我想我需要制作女贞子来解决这个问题。不确定如何编写。