使用VBA在包含特定关键字的任何行之后添加一行并用数据填充列

发布于 2025-01-13 19:46:06 字数 710 浏览 3 评论 0原文

我需要在包含关键字“skimmer”的任何行之后添加一行,然后使用以下数据填充列:

A 列和 B 列:与上一行中此列中的数据匹配。

D、F、H、I、J、K 列带有文本(这些总是相同的)

这是我到目前为止所拥有的,这不是添加行,似乎代码无法识别 Excel 中的关键字,甚至知道文字在那里..

Sub Skimmer()
Set rng2 = Range("A1").CurrentRegion
lr4 = rng2.Cells(Rows.Count, "K").End(3).Row

For i = lr4 To 2 Step -1
    If rng2.Cells(i, 11) Like "*Skimmer*" Then
        rng2.Cells(i, 11).Offset(1).EntireRow.Insert
        rng2.Cells(i, 3).Offset(1).Resize(1, 9).Value = _
        Array("", "ColD", "", "ColF", "", "ColH", "ColI", "ColJ", "ColK")
        rng2.Cells(i, 1).Offset(1).Resize(1, 2).Value = rng2.Cells(i, 1).Resize(1, 2).Value
    End If
Next i

End Sub

I need to add a row after any row that contains the keyword "skimmer", then fill columns with the following data:

columns A and B: match the data in this column from the row above.

columns D, F, H, I, J, K with text (these will always be the same)

here is what I have so far, this is not adding rows, it seems the code is not recognizing the keyword in the excel, even know the text is there..

Sub Skimmer()
Set rng2 = Range("A1").CurrentRegion
lr4 = rng2.Cells(Rows.Count, "K").End(3).Row

For i = lr4 To 2 Step -1
    If rng2.Cells(i, 11) Like "*Skimmer*" Then
        rng2.Cells(i, 11).Offset(1).EntireRow.Insert
        rng2.Cells(i, 3).Offset(1).Resize(1, 9).Value = _
        Array("", "ColD", "", "ColF", "", "ColH", "ColI", "ColJ", "ColK")
        rng2.Cells(i, 1).Offset(1).Resize(1, 2).Value = rng2.Cells(i, 1).Resize(1, 2).Value
    End If
Next i

End Sub

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

舞袖。长 2025-01-20 19:46:06

插入范围行并填充数据

  • 这将在范围内插入行,而不是整个行,即范围右侧的任何数据,保持不变。

紧凑

Sub InsertSkimmersCompact()
    
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    Dim rng2 As Range: Set rng2 = ws.Range("A1").CurrentRegion
    Dim r As Long
    For r = rng2.Rows.Count To 2 Step -1
        If LCase(rng2.Cells(r, "K").Value) Like "*skimmer*" Then
            With rng2.Rows(r).Offset(1)
                .Insert xlShiftDown, xlFormatFromLeftOrAbove
                With .Offset(-1)
                    .Columns("A:B").Value = .Offset(-1).Columns("A:B").Value
                    .Columns("C:K").Value = Array("", "ColD", "", "ColF", _
                        "", "ColH", "ColI", "ColJ", "ColK")
                End With
            End With
        End If
    Next r

    MsgBox "Skimmer-insertion complete.", vbInformation

End Sub

论证

Sub InsertSkimmersTest()
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    Dim rng2 As Range:  Set rng2 = ws.Range("A1").CurrentRegion
    InsertSkimmers rng2
End Sub

Sub InsertSkimmers(ByVal rg As Range)
    
    Dim r As Long
    For r = rg.Rows.Count To 2 Step -1
        If LCase(rg.Cells(r, "K").Value) Like "*skimmer*" Then
            With rg.Rows(r).Offset(1)
                .Insert xlShiftDown, xlFormatFromLeftOrAbove
                With .Offset(-1)
                    .Columns("A:B").Value = .Offset(-1).Columns("A:B").Value
                    .Columns("C:K").Value = Array("", "ColD", "", "ColF", _
                        "", "ColH", "ColI", "ColJ", "ColK")
                End With
            End With
        End If
    Next r

    MsgBox "Skimmer-insertion complete.", vbInformation

End Sub

Insert Range Rows and Fill With Data

  • This inserts rows in the range, not entire rows i.e. any data to the right of the range, stays intact.

Compact

Sub InsertSkimmersCompact()
    
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    Dim rng2 As Range: Set rng2 = ws.Range("A1").CurrentRegion
    Dim r As Long
    For r = rng2.Rows.Count To 2 Step -1
        If LCase(rng2.Cells(r, "K").Value) Like "*skimmer*" Then
            With rng2.Rows(r).Offset(1)
                .Insert xlShiftDown, xlFormatFromLeftOrAbove
                With .Offset(-1)
                    .Columns("A:B").Value = .Offset(-1).Columns("A:B").Value
                    .Columns("C:K").Value = Array("", "ColD", "", "ColF", _
                        "", "ColH", "ColI", "ColJ", "ColK")
                End With
            End With
        End If
    Next r

    MsgBox "Skimmer-insertion complete.", vbInformation

End Sub

Argumented

Sub InsertSkimmersTest()
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    Dim rng2 As Range:  Set rng2 = ws.Range("A1").CurrentRegion
    InsertSkimmers rng2
End Sub

Sub InsertSkimmers(ByVal rg As Range)
    
    Dim r As Long
    For r = rg.Rows.Count To 2 Step -1
        If LCase(rg.Cells(r, "K").Value) Like "*skimmer*" Then
            With rg.Rows(r).Offset(1)
                .Insert xlShiftDown, xlFormatFromLeftOrAbove
                With .Offset(-1)
                    .Columns("A:B").Value = .Offset(-1).Columns("A:B").Value
                    .Columns("C:K").Value = Array("", "ColD", "", "ColF", _
                        "", "ColH", "ColI", "ColJ", "ColK")
                End With
            End With
        End If
    Next r

    MsgBox "Skimmer-insertion complete.", vbInformation

End Sub
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文