我想知道如何在具有“订单类型”的指定行上方插入3个额外的行(如下所述)。
此行在工作表中多次出现。下面的代码有效,除了它插入指定行下面的行。谢谢
Sub try()
Dim c As Range
For Each c In Range("A1:A100")
If c.Value Like "*Order Type*" Then
c.Offset(3, 0).EntireRow.Insert
End If
Next c
End Sub
答案 0 :(得分:4)
如果您的问题是在搜索条件之上添加3行,那么解决问题应该很简单:
在您的代码行中:
c.Offset(3, 0).EntireRow.Insert
你的专栏说当找到订单类型时,他应该在下面3行并插入额外的行。
应该是这样的:
c.EntireRow.Resize(3).Insert
我的专栏说,当找到订单类型时,在其上方添加3行。
希望这就是你要找的。 p>
编辑:
我搜索了互联网并找到了与您的问题类似的内容,并根据您的需要进行了更改。希望这对你有用。 几点解释它是如何工作的:它一直在A列中搜索,如果找到“ Order Type ”,它会在它上面添加3行。当宏转到空白单元格时,它会停止。试一试,告诉我它是否适合你。
Sub AddRows()
Dim lastValue As String, i As Long, r As Long
Do
r = r + 1
If r > 1 And Cells(r, 1).Value Like "*Order Type*" Then
If Cells(r, 1).Value = "" Then Exit Do
For i = 1 To 3
Rows(r).Insert Shift:=xlUp
Next
r = r + 3
Else
If IsEmpty(Cells(r, 1)) = True Then
Exit Do
Else
End If
End If
lastValue = Cells(r, 1).Value
Loop
End Sub
答案 1 :(得分:1)
这应该是三行而不是三行:
c.Offset(-3, 0).EntireRow.Insert
请谨慎使用,因为如果当前行上方没有三行,则会抛出错误。更安全的方法是从当前行插入+ 2并将所有内容向下移动。
Rows(c.Row & ":" & c.Row + 2).EntireRow.Insert Shift:=xlDown
编辑:直到excel冻结为止的原因是由于你的循环构造方式。第一次找到匹配时,它会插入行然后再继续查找相同的匹配,从而导致它陷入无限循环。
你可以尝试一下,看看它是否符合你的要求,它对我有用。
Sub try()
Dim i As Long
Dim c As Range
Do While i < ActiveSheet.UsedRange.Rows.Count
i = i + 1
Set c = Cells(i, 1)
If c.Value Like "*Order Type*" Then
Rows(c.Row & ":" & c.Row + 2).EntireRow.Insert Shift:=xlDown
i = i + 3
End If
Debug.Print i
Loop
End Sub