Excel 如何修复700K行范围的溢出
作为较大宏的一部分,代码应该检查D列中的单元格是否以6开头。如果是这样,从第二个开始复制中间的5个字符(基本上跳过6个),如果不是从6开始,只需从左侧复制前5个字符并粘贴到E列的相邻单元格中 我一直得到一个溢出错误,我假设是因为文档有700K行长。关于如何解决这个问题,有什么建议吗Excel 如何修复700K行范围的溢出,excel,vba,overflow,Excel,Vba,Overflow,作为较大宏的一部分,代码应该检查D列中的单元格是否以6开头。如果是这样,从第二个开始复制中间的5个字符(基本上跳过6个),如果不是从6开始,只需从左侧复制前5个字符并粘贴到E列的相邻单元格中 我一直得到一个溢出错误,我假设是因为文档有700K行长。关于如何解决这个问题,有什么建议吗 Sub Left_Function() Dim sourceRang As Range, destinationRange As Range, i As Integer, LastRow As Integer La
Sub Left_Function()
Dim sourceRang As Range, destinationRange As Range, i As Integer, LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count
Set SourceRange = Sheet1.Range("D1:LastRow")
Set desinationRange = Sheet1.Range("E1:LastRow")
For i = 1 To SourceRange.Count
For Each cell In SourceRange
If Left(cell.Value, 1) = "6" Then
destinationRange(i, 1).Value = Mid(SourceRange(i, 1).Value, 2, 5)
Else: destinationRange(i, 1).Value = Left(SourceRange(i, 1).Value, 5)
End If
Next cell
Next i
End Sub
我对VBA不是很在行,所以它是基于我在谷歌上搜索到的东西进行的相当多的修补工作,所以如果你有一个替代的代码位,那么我会全神贯注。我认为导致溢出的原因是你将
I
和LastRow
指定为Int
类型Int
的最大值为32767
,因此如果有700K行,则会出现溢出。要修复此问题,请将类型更改为Long
另外,初始化SourceRange
和destinationRange
的方式看起来有点错误,原因有几点---像“D1:LastRow”
这样的表达式只是字符串文字,在Excel中不会给出有效的范围
你需要这样的东西:
Sheet1.Range("D1:D" & CStr(LastRow))
这里有三件事微妙的变化。首先,CStr(LastRow)
将数值LastRow
转换为其等效字符串。其次,&
连接字符串(也可以使用+
)。第三,注意需要为范围的开始和结束显式指定列:D1:100无效(只有一个D);但D1:D100可以工作
希望能有所帮助。我认为导致溢出的原因是您将
I
和LastRow
指定为Int
类型Int
的最大值为32767
,因此如果有700K行,则会出现溢出。要修复此问题,请将类型更改为Long
另外,初始化SourceRange
和destinationRange
的方式看起来有点错误,原因有几点---像“D1:LastRow”
这样的表达式只是字符串文字,在Excel中不会给出有效的范围
你需要这样的东西:
Sheet1.Range("D1:D" & CStr(LastRow))
这里有三件事微妙的变化。首先,CStr(LastRow)
将数值LastRow
转换为其等效字符串。其次,&
连接字符串(也可以使用+
)。第三,注意需要为范围的开始和结束显式指定列:D1:100无效(只有一个D);但D1:D100可以工作
希望能有所帮助。您的代码中有很多问题
- 数据类型使用不正确(整数而不是长)
- 无效的范围定义
范围(“D1:LastRow”)
- 变量名和对象引用中的许多拼写错误
- 不一致的
引用(工作表
可能是也可能不是活动工作表
)工作表1
- 不必要的嵌套For循环(这将耗尽您的运行时间)
- 对于如此大的数据集,直接循环范围将使代码非常慢
Option Explicit
Sub Left_Function()
Dim ws As Worksheet
Dim sourceRange As Range, destinationRange As Range
Dim i As Long
Dim src As Variant, dst As Variant
Set ws = ActiveSheet
With ws
Set sourceRange = .Range(.Cells(1, 4), .Cells(.Rows.Count, 4).End(xlUp))
Set destinationRange = sourceRange.Offset(0, 1)
src = sourceRange.Value
ReDim dst(1 To UBound(src, 1), 1 To 1)
For i = 1 To UBound(src, 1)
dst(i, 1) = Mid$(src(i, 1), IIf(Left$(src(i, 1), 1) = "6", 2, 1), 5)
Next
destinationRange = dst
End With
End Sub
代码中有很多问题
- 数据类型使用不正确(整数而不是长)
- 无效的范围定义
范围(“D1:LastRow”)
- 变量名和对象引用中的许多拼写错误
- 不一致的
引用(工作表
可能是也可能不是活动工作表
)工作表1
- 不必要的嵌套For循环(这将耗尽您的运行时间)
- 对于如此大的数据集,直接循环范围将使代码非常慢
Option Explicit
Sub Left_Function()
Dim ws As Worksheet
Dim sourceRange As Range, destinationRange As Range
Dim i As Long
Dim src As Variant, dst As Variant
Set ws = ActiveSheet
With ws
Set sourceRange = .Range(.Cells(1, 4), .Cells(.Rows.Count, 4).End(xlUp))
Set destinationRange = sourceRange.Offset(0, 1)
src = sourceRange.Value
ReDim dst(1 To UBound(src, 1), 1 To 1)
For i = 1 To UBound(src, 1)
dst(i, 1) = Mid$(src(i, 1), IIf(Left$(src(i, 1), 1) = "6", 2, 1), 5)
Next
destinationRange = dst
End With
End Sub