Excel VBA - 循环复制特定值下方的行

标签 excel vba

我有一个电子表格,其中包含多个标题样式行。我想使用脚本复制每个标题下方的行。我目前从一个 3 年前的 StackOverflow 答案中得到了这个:

Private Sub CommandButton4_Click()

    Dim i As Range

    For Each i In Sheet1.Range("A1:A1000")
        Select Case i.Value
            Case "HERE"
                Sheet3.Range("A" & Sheet3.Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Value = i.EntireRow.Value
            Case Else

        End Select
     Next i

End Sub

这有效,只是它复制 header 本身(此处),而不是其下面的数据。我对VBA还是个新手,所以我不知道如何调整它。我尝试过类似 Dim j As Integer,然后 j = i + 1j.EntireRow 等,但这不起作用因为 iRange 而不是 Integer。我对 VBA 的了解还不够,无法实现此功能。

有什么建议吗?谢谢!

编辑:除了仅复制标题下方第一行的情况之外,我还可以修改此设置以复制标题下方的 x 行吗?例如,一旦找到标题,就复制接下来的三行。再次感谢!

最佳答案

使用Offset(1, 0)属性与 Range i 获取下一行 i:

Sheet3.Range("A" & Sheet3.Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Value = i.Offset(1, 0).EntireRow.Value

编辑:您可以使用它复制所有行,直到遇到下一个“HERE”:

Private Sub CommandButton4_Click()

    Dim i As Range

    For Each i In Sheet1.Range("A1:A5")

        If i.Value = "HERE" Then
            Sheet3.Range("A" & Sheet3.Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Value = i.Offset(1, 0).EntireRow.Value
        ElseIf i.Value <> "" Then
            Sheet3.Range("A" & Sheet3.Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Value = i.EntireRow.Value
        Else
            'Else is optional, feel free to remove if not required
        End If

     Next i

End Sub

表1:

 A   |   B  |  C
HERE |      |   
11   |  11  |  11
33   |  33  |  33

HERE |      |    
22   |  22  |  22

表3:

 A   |   B  |  C
11   |  11  |  11
33   |  33  |  33 
22   |  22  |  22

Edit2:它复制“here”一词紧下方的所有行(不区分大小写,请注意使用 UCase):

Private Sub CommandButton4_Click()

    Dim i As Long
    Dim j As Long
    Dim lastRow As Long
    Dim blankRow As Long

    i = 1
    lastRow = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
    blankRow = Sheet3.Range("A" & Sheet3.Rows.Count).End(xlUp).Row + 1

    Do While True

        If UCase(Sheet1.Range("A" & i).Value) = "HERE" Then

            j = Sheet1.Range("A" & i).End(xlDown).Row

            Union(Sheet1.Range("A" & i + 1).EntireRow, Sheet1.Range("A" & j).EntireRow).Copy
            Sheet3.Range("A" & blankRow).PasteSpecial xlValue

            blankRow = Sheet3.Range("A1").End(xlDown).Row + 1
            i = j + 1

        Else
            i = i + 1
        End If

        If i >= lastRow Then
            Exit Do
        End If

    Loop

End Sub

表1:

 A   |   B  |  C
HERE |      |   
11   |  11  |  11
33   |  33  |  33

55   |  55  |  55

HERE |      |    
22   |  22  |  22

44   |  44  |  44    

表3:

 A   |   B  |  C
11   |  11  |  11
33   |  33  |  33 
22   |  22  |  22

关于Excel VBA - 循环复制特定值下方的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38025455/

相关文章:

excel - 在 Excel 自定义函数中将 NOW() 作为参数传递会产生 #VALUE!错误?

excel - 在 Excel VBA 中使用偏移量时出错

vba - 命名范围字符串限制

.net - 在 VSTO Excel 项目中创建弹出日历

vba - 比较两列 VBA 宏时 Excel 崩溃

excel - VBA Excel 2010 - 嵌入图片和调整大小

python - 如何使用 xlwings 获取 Excel 工作表中的所有命名范围?

javascript - 如何创建将数字转换为双射六维数的函数?

sql - 我可以使用 SQL 语句从工作表 A + 工作表 B 中提取数据并仅使用 Excel 转储到工作表 C 中吗

vba - 如何使用 selenium 找到基于 wfd-id 的 html 元素?