Excel 更改范围将断开子对象
我需要偏移第一行,所以我将子行中的范围从Excel 更改范围将断开子对象,excel,vba,Excel,Vba,我需要偏移第一行,所以我将子行中的范围从 For Each rng In Sheets("360").Range("B:CJ" & Lastrow) 到 “知道大麦”号潜艇的运行时间为5秒,“知道”号潜艇的运行时间甚至为分钟 如何解决这个问题 谢谢 Sub CleanAll() Dim rng As Range Dim Lastrow As Long With Sheets("360") Lastrow = .Range("A" &
For Each rng In Sheets("360").Range("B:CJ" & Lastrow)
到
“知道大麦”号潜艇的运行时间为5秒,“知道”号潜艇的运行时间甚至为分钟
如何解决这个问题
谢谢
Sub CleanAll()
Dim rng As Range
Dim Lastrow As Long
With Sheets("360")
Lastrow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
For Each rng In Sheets("360").Range("B2:CJ" & Lastrow)
rng.Value = NumberOnly(rng.Value)
Next
End Sub
功能
Function NumberOnly(strSource As String) As String
Dim i As Integer
Dim strResult As String
For i = 1 To Len(strSource)
Select Case Asc(Mid(strSource, i, 1))
Case 32, 48 To 57, 65, 78:
strResult = strResult & Mid(strSource, i, 1)
End Select
Next
NumberOnly = strResult
End Function
按如下方式拆下以下2个CJ:
For Each rng In Sheets("360").Range("B2:CJ" & Lastrow)
Lastrow已经指定了最后一行编号,因此,如果Lastrow值为300,并且您写入了“CJ2”和Lastrow,那么您的实际范围现在是B2:CJ2300,这意味着您现在要运行2000多行
按如下方式拆下以下2个CJ:
For Each rng In Sheets("360").Range("B2:CJ" & Lastrow)
Lastrow已经指定了最后一行编号,因此如果Lastrow值为300,并且您写入了“CJ2”和Lastrow,那么您的实际范围现在是B2:CJ2300,这意味着您现在又运行了2000多行。我发现在表中使用您的数据可以解决许多重新调整范围的问题 也就是说,您应该从您的范围创建一个变体数组,然后在变体数组中循环。完成后,将阵列复制回范围。这将使它加速百倍 像这样的
Sub CleanAll()
Dim myArray As Variant
Dim Lastrow As Long
With Sheets("360")
Lastrow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
myArray = Sheets("360").Range("B2:CJ" & Lastrow)
For x = LBound(myArray) To UBound(myArray)
For y = LBound(myArray, 2) To UBound(myArray, 2)
myArray(x, y) = NumberOnly(myArray(x, y))
Next y
Next x
Sheets("360").Range("B2:CJ" & Lastrow) = myArray
End Sub
Function NumberOnly(ByVal strSource As String) As String
Dim i As Integer
Dim strResult As String
For i = 1 To Len(strSource)
Select Case Asc(Mid(strSource, i, 1))
Case 32, 48 To 57, 65, 78:
strResult = strResult & Mid(strSource, i, 1)
End Select
Next
NumberOnly = strResult
End Function
我发现在表中使用数据将解决许多重新调整范围的问题 也就是说,您应该从您的范围创建一个变体数组,然后在变体数组中循环。完成后,将阵列复制回范围。这将使它加速百倍 像这样的
Sub CleanAll()
Dim myArray As Variant
Dim Lastrow As Long
With Sheets("360")
Lastrow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
myArray = Sheets("360").Range("B2:CJ" & Lastrow)
For x = LBound(myArray) To UBound(myArray)
For y = LBound(myArray, 2) To UBound(myArray, 2)
myArray(x, y) = NumberOnly(myArray(x, y))
Next y
Next x
Sheets("360").Range("B2:CJ" & Lastrow) = myArray
End Sub
Function NumberOnly(ByVal strSource As String) As String
Dim i As Integer
Dim strResult As String
For i = 1 To Len(strSource)
Select Case Asc(Mid(strSource, i, 1))
Case 32, 48 To 57, 65, 78:
strResult = strResult & Mid(strSource, i, 1)
End Select
Next
NumberOnly = strResult
End Function
我认为你是对的,但这让人困惑,因为@Tim在他的问题中是双向的+1@DougGlancy说得好,我没有意识到在CleanAll潜水艇上它是可以的。但这也解释了为什么潜水艇突然变得更长+感谢您的回复。因此,图纸(“360”)中每个rng的
。范围(“B2:CJ”和最后一行)
将第一行从B2设置为CJ2
?i、 e第一行没有被地铁控制,我不确定我是否理解你想要的:B2:CJ50将选择2到50之间的行,因此它将跳过第一行(A1:CJ12)。谢谢你,我的意思是我认为你是对的,但这让人困惑,因为@Tim在他的问题中是双向的+1@DougGlancy说得好,我没有意识到在CleanAll潜水艇上它是可以的。但这也解释了为什么潜水艇突然变得更长+感谢您的回复。因此,图纸(“360”)中每个rng的。范围(“B2:CJ”和最后一行)
将第一行从B2设置为CJ2
?i、 e第一行没有被SUB操作,我不确定我是否理解您想要的:B2:CJ50将选择2到50之间的行,因此它将跳过第一行(A1:CJ12)谢谢您,我的意思是,我想使用您的代码,但是当我运行它时,ByRef参数类型不匹配
myArray(X,y)=NumberOnly(myArray(X,y))
第二个myArray(X,y)
以蓝色高亮显示,使NumberOnly函数的形式参数为byVal,我将编辑我的答案。jAverde,我想使用你的代码,但当我运行它时,myArray(X,y)=NumberOnly(myArray(X,y))
第二个myArray(X,y)
以蓝色高亮显示,将NumberOnly函数的形式参数设置为byVal,我将编辑我的答案。