【问题标题】:Delete entire row based on row number VBA根据行号VBA删除整行
【发布时间】:2017-07-11 14:38:57
【问题描述】:

我有一个包含 18,806 行的列表(名为“Reference”的工作表),需要从 90,000 多行的 Excel 表(名为“To Delete”的工作表)中删除。我正在尝试创建一个包含“参考”中的行号的数组,遍历该数组,并从“删除”中删除数组中的每一行。到目前为止,我有:

    Sub deleteRows()

        Dim rowArray As Variant
        ReDim rowArray(18085) As Integer
        rowArray = Sheets("Reference").Range("A1:A18086").Value

        Dim Arr As Variant
        Dim del As Integer
        Dim i As Integer
        i = 1
        For Each Arr In rowArray
            del = Arr
            Sheets("To Delete").Cells(del, 1).EntireRow.Clear
        Next

    End Sub

编辑:想通了!它只是清除内容并有一些内存溢出错误,但我正在解决这个问题。只是想在这里发布以供将来参考:)

【问题讨论】:

  • 我想已经在delete a row in excel vba上回答了
  • 你不会遇到一点小问题吗?假设我想删除第 2 行和第 4 行。我运行这个循环一次,它删除了第 2 行,但是现在,第 4 行向上移动到第 3 行。现在我在再次循环并删除当前行时删除原始第 5 行第 4 行。你考虑过这个吗?
  • @m.nachury 试过了——删除了一大堆我不想删除的行,所以我正在尝试编写自己的代码并收到此错误:(
  • @E.Trauger 是的,我意识到我一发布就将其改为清除。它们是大块的,所以我不介意删除空白空间,只需要在没有人为错误的情况下找到它们的位置
  • 这仅在您的行列表按降序排列时有效,最高行号到最低行号。否则,如果你有2,5,7,当第 2 行被删除时,第 5 行刚刚变成第 4 行,将被跳过,第 6 行将被删除。但是如果你这样做7,5,2,行顺序不会因为行被删除而改变。

标签: excel vba


【解决方案1】:

根据我之前的评论,我建议不要改变你的行号:

For Each a In rowArray
    del = rowArray(a)
    Worksheets.Rows(del).ClearContents
Next a

Dim rowNum as Integer
rowNum = Worksheets.Rows.RowCount
While rowNum > 0
    If Worksheets.Cells(rowNum,1).Value = "" Then
        Worksheets.Rows(rowNum).Delete
    End If
    rowNum = rowNum - 1
Loop

这是处理后的代码。这应该几乎可以使用了:

Sub deleteRows()
    Dim rowArray(18086) As Integer
    Dim i As Integer, j As Integer, del As Integer, rowNum As Integer
    i = 1
    j = 18086
    While i <= j
        rowArray(i) = Sheets("Reference").Range(i, 1).Value
        i = i + 1
    Loop

    For Each a In rowArray
        del = rowArray(a)
        Sheets("Reference").Rows(del).ClearContents
    Next a

    rowNum = Sheets("Reference").Rows.RowCount
    While rowNum > 0
        If Sheets("Reference").Cells(rowNum, 1).Value = "" Then
              Sheets("Reference").Rows(rowNum).Delete
        End If
        rowNum = rowNum - 1
    Loop
End Sub

为了安全起见,请确保在调用变量之前定义它们。这是代码中的通用规则。

【讨论】:

  • 您将希望在删除时向后循环,如果有两行背靠背空,它将跳过第二行。
  • 我收到编译错误:找不到方法或数据成员?不知道这意味着什么,可能是因为我已经对模块进行了太多更改..
  • 此代码可能无法直接复制粘贴。这完全取决于您如何定义工作表等。如果您按原样粘贴整个代码,我可以为您提供帮助。没有它,我只能引导您朝着正确的方向前进,这段代码就是这样做的!
  • 谢谢——如果你不知道,这是我第一次在这里发帖:)
  • 尝试在您的原始帖子中添加“编辑”部分,以便我们查看格式。
【解决方案2】:

试试这个:

Worksheets.Rows(i).Delete

以 i 作为你的行号。

Nb:它会导致你的行数很糟糕

【讨论】:

  • 这给了我一个需要对象的错误,对不起,我没有在 VBA 中编码太多,所以事情的语法对我来说有点丢失
  • 重新获取您的确切代码:Worksheets.Rows(i).Delete
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
相关资源
最近更新 更多