【问题标题】:Excel VBA: Skip the copied cell in for loopExcel VBA:在for循环中跳过复制的单元格
【发布时间】:2020-09-24 16:26:00
【问题描述】:

我有一些数据,我有一些条件。如果 B 列中的每个单元格都包含诸如“and”、“or”、“and/or”之类的单词,则创建该行的副本并将其插入到复制行之后的下一行。

目前我的数据如下所示:

这是我的代码:

Sub Macro2()
    Dim rng As Range, cell As Range, rowRange As Range
        
    Set rng = Range("B1", Range("B1").End(xlDown))
    
    Dim values As Variant
    Dim Result() As String
    connectorArray = Array("and/or", "or", "and")
    Dim findConnectorWord As String
        
    'Worksheets("Sheet1").Activate
    'Range("B1", Range("B1").End(xlDown)).Select
    
    For Each cell In rng
        findConnectorWord = FindString(cell.Value, connectorArray)
        If findConnectorWord <> vbNullString Then
            Result() = Split(cell, findConnectorWord)
            Set rowRange = Range("A" & cell.Row, Range("B" & cell.Row).End(xlToRight))
            rowRange.Copy           
            rowRange .Offset(1, 0).Insert Shift:=xlDown
    
            'Logic to skip the next cell

        End If
    Next cell    
End Sub

Function FindString(SearchString As String, arr As Variant) As String
    For Each searchWord In arr
        If InStr(SearchString, searchWord) > 0 Then
            FindString = searchWord
            Exit For
        End If
    Next
End Function

我遇到的问题是,一旦将行复制并插入下一行,下一次迭代就会读取复制的行(“房主或住宅火灾”)并创建另一个副本。我想要做的是在复制行后跳过单元格,在 if 条件内查看单元格 B3(假设在复制新单元格时伞(C)被推下)。最好的方法是什么?

【问题讨论】:

  • 向后迭代,以便在当前行之后插入
  • 改用Do While循环,复制时将行计数器加2>>粘贴一行

标签: excel vba


【解决方案1】:

实现@freeflow 在他的评论中所写内容的可能选项之一:

    ...
    Set cell = Range("B1").End(xlDown)  ' start from last cell
    Do Until False
        findConnectorWord = FindString(cell.Value, connectorArray)
        If findConnectorWord <> vbNullString Then
            ...
            Set rowRange = cell.EntireRow
            rowRange.Copy
            rowRange.Offset(1, 0).Insert Shift:=xlDown
        End If
        If cell.Row = 1 Then Exit Do ' First row? Enough
        Set cell = cell.Offset(-1, 0)   ' Shift up
    Loop
   ...

还有一点注意——在为connectorArray定义值时,在术语中添加空格:" and "而不是"and"。否则,你可以用一些 Brandon 或 Alexandra 复制这条线

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多