Excel 工作表排序规则溢出问题
我试图将多个工作表中的所有数据合并到一个工作表中,但在它变得特别远之前,我遇到了一个“溢出”错误。。。当然有更好的方法来避免这个问题Excel 工作表排序规则溢出问题,excel,vba,Excel,Vba,我试图将多个工作表中的所有数据合并到一个工作表中,但在它变得特别远之前,我遇到了一个“溢出”错误。。。当然有更好的方法来避免这个问题 Sub collateSheets() Dim ws As Worksheet Dim src As Worksheet Dim LR As Integer Dim LR2 As Integer Set ws = Sheets.Add With ws .Name = "Collated Data" .Range("1:1").Value = S
Sub collateSheets()
Dim ws As Worksheet
Dim src As Worksheet
Dim LR As Integer
Dim LR2 As Integer
Set ws = Sheets.Add
With ws
.Name = "Collated Data"
.Range("1:1").Value = Sheets(2).Range("1:1").Value
End With
For i = 1 To Sheets.Count
Sheets(i).Activate
LR = ws.Cells(Rows.Count, 1).End(xlUp).Row
LR2 = Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row
If LR2 <> 1 Then
For j = 2 To LR2
LRinput = LR - 1 + j
ws.Rows(LRinput).Value = Sheets(i).Rows(j).Value
Next j
End If
LR = vbNull
LR2 = vbNull
Next i
End Sub
子页()
将ws设置为工作表
Dim src As工作表
作为整数的Dim LR
作为整数的Dim LR2
设置ws=Sheets.Add
与ws
.Name=“整理的数据”
.范围(“1:1”).值=表(2).范围(“1:1”).值
以
对于i=1到1张。计数
工作表(一)激活
LR=ws.Cells(Rows.Count,1).End(xlUp).Row
LR2=工作表(i).单元格(行数,1).结束(xlUp).行
如果是LR2 1,则
对于j=2至LR2
LRinput=LR-1+j
ws.Rows(lrinport).Value=Sheets(i).Rows(j).Value
下一个j
如果结束
LR=vbNull
LR2=vbNull
接下来我
端接头
您也在循环新的“整理数据”表
将其放在第一张纸上,并从第2张纸开始打印
此外,您可以避免在行中进行迭代,并一次性复制/粘贴它们的值
最后循环查看工作表
集合,避免任何可能的图表:
Sub collateSheets()
Dim ws As Worksheet
Dim src As Worksheet
Dim LR As Long, LR2 As Long
Dim i As Long
Set ws = Worksheets.Add(before:=Sheets(1)) ' place new sheet in first position
With ws
.Name = "Collated Data"
.Range("1:1").value = Sheets(2).Range("1:1").value
End With
For i = 2 To Worksheets.Count ' loop from 2nd sheet on (thus avoiding "Collated Data")
LR = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
LR2 = Sheets(i).Cells(Sheets(i).Rows.Count, 1).End(xlUp).Row
If LR2 <> 1 Then ws.Rows(LR + 1).Resize(LR2 - 1).value = Sheets(i).Rows("2:" & LR2).value
Next
End Sub
子页()
将ws设置为工作表
Dim src As工作表
变暗LR长度相同,LR2长度相同
我想我会坚持多久
设置ws=Worksheets.Add(before:=Sheets(1))'将新工作表放在第一个位置
与ws
.Name=“整理的数据”
.范围(“1:1”).值=表(2).范围(“1:1”).值
以
对于i=2到工作表。从第二张工作表开始循环计数(从而避免“整理数据”)
LR=ws.Cells(ws.Rows.Count,1).End(xlUp).Row
LR2=工作表(i).单元格(工作表(i).行数,1).结束(xlUp).行
如果是LR2.1,那么ws.Rows(LR+1).Resize(LR2-1).value=Sheets(i).Rows(“2:&LR2.value
下一个
端接头
您也在循环新的“整理数据”表
将其放在第一张纸上,并从第2张纸开始打印
此外,您可以避免在行中进行迭代,并一次性复制/粘贴它们的值
最后循环查看工作表
集合,避免任何可能的图表:
Sub collateSheets()
Dim ws As Worksheet
Dim src As Worksheet
Dim LR As Long, LR2 As Long
Dim i As Long
Set ws = Worksheets.Add(before:=Sheets(1)) ' place new sheet in first position
With ws
.Name = "Collated Data"
.Range("1:1").value = Sheets(2).Range("1:1").value
End With
For i = 2 To Worksheets.Count ' loop from 2nd sheet on (thus avoiding "Collated Data")
LR = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
LR2 = Sheets(i).Cells(Sheets(i).Rows.Count, 1).End(xlUp).Row
If LR2 <> 1 Then ws.Rows(LR + 1).Resize(LR2 - 1).value = Sheets(i).Rows("2:" & LR2).value
Next
End Sub
子页()
将ws设置为工作表
Dim src As工作表
变暗LR长度相同,LR2长度相同
我想我会坚持多久
设置ws=Worksheets.Add(before:=Sheets(1))'将新工作表放在第一个位置
与ws
.Name=“整理的数据”
.范围(“1:1”).值=表(2).范围(“1:1”).值
以
对于i=2到工作表。从第二张工作表开始循环计数(从而避免“整理数据”)
LR=ws.Cells(ws.Rows.Count,1).End(xlUp).Row
LR2=工作表(i).单元格(工作表(i).行数,1).结束(xlUp).行
如果是LR2.1,那么ws.Rows(LR+1).Resize(LR2-1).value=Sheets(i).Rows(“2:&LR2.value
下一个
端接头
我的代码创建一个名为“Output”的新工作表,并导入其中的所有数据
Option Explicit
Sub test()
Dim ws As Worksheet
Dim wsNew As Worksheet
Dim Lrow As Long
Dim Excist As Boolean
Dim SheetName As String
SheetName = "Output"
Excist = False
For Each ws In ThisWorkbook.Sheets
If ws.Name = "Output" Then
Excist = True
Set wsNew = ws
End If
Next
If Excist = False Then
Set wsNew = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsNew.Name = SheetName
End If
For Each ws In ThisWorkbook.Sheets
If ws.Name <> "Output" Then
ws.UsedRange.Copy
Lrow = wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Row
wsNew.Range("A" & Lrow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next
End Sub
选项显式
子测试()
将ws设置为工作表
新建为工作表
暗淡的光线和长的一样
作为布尔的弱激子
将SheetName设置为字符串
SheetName=“输出”
激子=假
对于此工作簿中的每个ws.Sheets
如果ws.Name=“Output”,则
激子=真
设置wsNew=ws
如果结束
下一个
如果Excist=False,则
设置wsNew=thiswoolk.Sheets.Add(之后:=_
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsNew.Name=SheetName
如果结束
对于此工作簿中的每个ws.Sheets
如果ws.Name是“输出”,那么
ws.UsedRange.Copy
Lrow=wsNew.Cells(wsNew.Rows.Count,“A”).End(xlUp).Row
wsNew.Range(“A”&Lrow).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank_
:=假,转置:=假
如果结束
下一个
端接头
我的代码创建一个名为“Output”的新工作表,并导入其中的所有数据
Option Explicit
Sub test()
Dim ws As Worksheet
Dim wsNew As Worksheet
Dim Lrow As Long
Dim Excist As Boolean
Dim SheetName As String
SheetName = "Output"
Excist = False
For Each ws In ThisWorkbook.Sheets
If ws.Name = "Output" Then
Excist = True
Set wsNew = ws
End If
Next
If Excist = False Then
Set wsNew = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsNew.Name = SheetName
End If
For Each ws In ThisWorkbook.Sheets
If ws.Name <> "Output" Then
ws.UsedRange.Copy
Lrow = wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Row
wsNew.Range("A" & Lrow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next
End Sub
选项显式
子测试()
将ws设置为工作表
新建为工作表
暗淡的光线和长的一样
作为布尔的弱激子
将SheetName设置为字符串
SheetName=“输出”
激子=假
对于此工作簿中的每个ws.Sheets
如果ws.Name=“Output”,则
激子=真
设置wsNew=ws
如果结束
下一个
如果Excist=False,则
设置wsNew=thiswoolk.Sheets.Add(之后:=_
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsNew.Name=SheetName
如果结束
对于此工作簿中的每个ws.Sheets
如果ws.Name是“输出”,那么
ws.UsedRange.Copy
Lrow=wsNew.Cells(wsNew.Rows.Count,“A”).End(xlUp).Row
wsNew.Range(“A”&Lrow).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank_
:=假,转置:=假
如果结束
下一个
端接头
使用Long
而不是Integer
,因为假设这是问题所在,那么后者只会上升到大约32k Am,尽管可能是其他问题。dang这是我第一次达到Integer的极限!使用Long
而不是Integer
,因为后者只会上升到大约32k Am,假设这就是问题所在,尽管可能是其他问题。dang这是我第一次达到整数的极限!这看起来不错,但它使用了“复制和粘贴”,街上的一句话是,这比value=value方法慢。所以我一直在寻找避免复制和粘贴的方法,但是当范围的维度可变时,我就遇到了麻烦,因为我不能说ws1.range(“A1:A10”).value=ws2.range(“A1:A10”).value,如果它每次都要更改的话。幸运的是,我可以在这个例子中复制整行,但我愿意打赌有一个计算速度更快的解决方案。。。它与resize有关这看起来不错,但它使用了复制粘贴,而街上的流行语是这比value=value方法慢。所以我很高兴