首页 > 解决方案 > Excel CSV 批量删除行

问题描述

我有一个超过 50k 产品的 csv 文件。它是一个 csv 文件,所有信息都在 A 列中,我的目标是遍历每一行并找到其中带有“保修扩展”的记录,然后删除该行。

我尝试了下面的代码,但我怀疑它在 A 列中查找仅包含保修扩展的行。我将如何自定义此代码以查看其中包含保修扩展的行,而不仅仅是保修扩展。

Last = Cells(Rows.Count, "A").End(xlUp).Row
For i = Last To 1 Step -1
    If (Cells(i, "A").Value) = "Warranty Extension" Then
'Cells(i, "A").EntireRow.ClearContents ' USE THIS TO CLEAR CONTENTS BUT NOT DELETE ROW
        Cells(i, "A").EntireRow.Delete
    End If
 Next i

标签: excelvba

解决方案


您需要使用Like 运算符和特殊字符来指示其他文本可能在您的搜索字符串之前或之后

Last = Cells(Rows.Count, "A").End(xlUp).Row
For i = Last To 1 Step -1
    If Cells(i, "A").Value Like "*Warranty Extension*" Then
        'Cells(i, "A").EntireRow.ClearContents ' USE THIS TO CLEAR CONTENTS BUT NOT DELETE ROW
        Cells(i, "A").EntireRow.Delete
    End If
Next i

运算符可以使用以下通配符Like

  1. *: 零个或多个字符
  2. ?: 任意单个字符
  3. #: 任何一位数 (0–9)
  4. [charlist]: charlist 中的任意单个字符
  5. [!charlist]: 不在字符列表中的任何单个字符

我想补充一点,您没有指定应该在其中执行操作的工作簿和工作表,这意味着代码将在任何活动工作表中执行(可以更改中间代码的东西)。除非您的代码驻留在工作表模块中,否则我建议设置 Workbook 和 Worksheet 变量以防止代码在错误的数据上执行:

Dim wb As Workbook
Dim ws As Worksheet

Set wb = Workbooks("Example.xlsx")
Set ws = wb.Sheets("Sheet1")

LRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

推荐阅读