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