繁体   English   中英

如果特定列中的单元格有数据,如何告诉 Excel 宏删除整行?

[英]How do I tell an excel macro to delete the entire row if cell in a specific column have data?

所以我有一个电子表格。 其中一列的单元格有数字、文本,有些是空白的。 我如何告诉宏删除列中单元格有数字的整行? 我想保留有文本或空白的行。

我知道有些人使用代码,但我不熟悉 Visual Basic。 我知道如何开始录制宏。 我知道如何分配快捷键。 我知道当宏出错时,通常是因为我忘记重命名选项卡。 我知道您可以将代码复制并粘贴到 vba 中,但我不知道如何实际操作。 我知道在哪里打开 vba,但是一旦打开,我就不知道在哪里粘贴代码。 我更愿意弄清楚如何手动执行此操作。 谢谢

Sub Macro1()

Dim N As Integer
Dim i As Integer
Dim M As Integer
Dim contents

N = Cells(Rows.Count, "A").End(xlUp).Row
M = 0

For i = 1 To N 
  contents = Cells(i, "A").Value
  type_in_cell = VarType(contents)
   
  If type_in_cell = 8 Or type_in_cell = 0 Then
    
   Else
     Rows(i).EntireRow.Delete
       i = i - 1
  End If
     
  M = M + 1
        
  If M = N Then Exit Sub    
   Next i
End Sub

如果您的最后一个单元格不为空并且您的相关列是“A”列,则这应该有效。 它检查单元格是文本还是空白,否则删除该行。

这被放入一个新模块中。 在“开发人员”选项卡中,依次转到“Visual Basic”、“插入”、“新模块”并粘贴上面的代码。 然后单击绿色播放按钮进行测试。 请注意,您无法撤消宏的操作,因此我强烈建议在编辑之前先保存文件的副本。

如果您没有可用的开发人员选项卡,请参阅以下文档:

https://support.microsoft.com/en-us/office/show-the-developer-tab-e1192344-5e56-4d45-931b-e5fd9bea2d45

在我处理答案时有人回答了,但无论如何我都会发布我的。

这是一个宏,它查看活动工作表 A 列中从第 1 行开始的每个单元格。如果单元格具有数值,则整行将被删除。 对于包含 A 列中的值的所有行,这将继续。根据需要调整列和第一行。

按 Alt+F11 打开 Visual Basic 编辑器 (VBE),然后按 Ctrl+R 查看项目资源管理器。 右键单击 VBAProject 并选择插入 > 模块。 如有必要,按 F7 查看代码窗格,然后将以下 VBA 代码复制并粘贴到新模块中。 按 Alt+F11 恢复活动工作表,然后按 F8 运行宏。 将工作簿另存为 *.xlsm 或 *.xlsb。

Sub DeleteNumericRows()
' delete rows that have numeric values in keyCol
    Const keyCol = 1 ' adjust this: A is 1, B is 2, etc.
    Const firstRow = 1 ' adjust this
    msg = "Do you want to delete each row containing a " _
        & "numeric value in column " & Chr(64 + keyCol) _
        & "? (This cannot be Undone by using Ctrl+Z.)"
    ans = MsgBox(msg, (vbQuestion + vbYesNo))
    If ans <> vbYes Then Exit Sub
    lastRow = Cells(Rows.Count, keyCol).End(xlUp).Row
    nRow = firstRow
    Do
        If IsNumeric(Cells(nRow, keyCol).Value) Then
            Rows(nRow).Delete
            lastRow = lastRow - 1
        Else
            nRow = nRow + 1
        End If
    Loop Until nRow > lastRow
End Sub

您可能还对wellsr VBA Q&A的类似问题和答案感兴趣。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM