如果特定列中的单元格包含数组字符串,如何从excel文件中删除行?

如果特定列中的单元格包含数组字符串,如何从excel文件中删除行?,excel,vba,Excel,Vba,我在许多文件夹中有许多excel文件,我需要删除所有文件中的行,其中ex.B列中是数组中的单词: 例如,我的坏话列表: 太阳、树、大汽车、杯子 如果A2列为“太阳是太阳系中心的恒星”-这一行已被删除 如果列中为“thesunis the…”,则该行已被删除。但这很糟糕 我的问题是: 如何删除具有数组元素的精确单词的行 如何计算数组元素 如何在数组元素中转义单引号(下面代码中的示例) 如何打开文件夹“C://folder”中的所有文件并在运行代码后全部保存 这是我的密码: Sub code()

我在许多文件夹中有许多excel文件,我需要删除所有文件中的行,其中ex.B列中是数组中的单词:

例如,我的坏话列表:

太阳、树、大汽车、杯子

如果A2列为“太阳是太阳系中心的恒星”-这一行已被删除

如果列中为“thesunis the…”,则该行已被删除。但这很糟糕

我的问题是:

  • 如何删除具有数组元素的精确单词的行
  • 如何计算数组元素
  • 如何在数组元素中转义单引号(下面代码中的示例)
  • 如何打开文件夹“C://folder”中的所有文件并在运行代码后全部保存
  • 这是我的密码:

    Sub code()
        Dim MyValue As String
        Dim a As Integer
        '------------------------------------------------------
        ArrayValueToRemove = Array("the sun", "code 'in", "another")
        Range("B:B").Select
        '------------------------------------------------------
        For Each cell In Selection
            MyValue = CStr(cell.Value)
            For a = 0 To 2
                If InStr(1, LCase(MyValue), LCase(ArrayValueToRemove(a))) > 0 Then
                    cell.EntireRow.Delete
                    Exit For
                End If
            Next
        Next cell
    End Sub
    
    Sub-deleteBadWordRows()
    Dim currentFile、currentSheet、badWords作为变量、lastRow、i作为整数、baseDirectory作为字符串
    '------------------------------------------------------
    baseDirectory=“c:\folder\”
    badWords=数组(“太阳”,“代码”在“另一个”)
    '------------------------------------------------------
    currentFile=Dir(基本目录)
    而(当前文件“”)
    工作簿。打开baseDirectory+currentFile
    对于工作簿(currentFile).工作表中的每个当前工作表
    lastRow=currentSheet.Cells(currentSheet.Rows.Count,“B”).End(xlUp).Row
    对于j=1到最后一行
    对于i=0到UBound(坏话)
    如果InStr(1,LCase(CStr(currentSheet.Cells(j,“B”).Value)),LCase(baddwords(i)))大于0,则
    currentSheet.行(j).删除
    j=j-1
    lastRow=lastRow-1
    退出
    如果结束
    下一个
    下一个
    下一个
    工作簿(当前文件)。保存
    工作簿(当前文件)。关闭
    currentFile=Dir
    温德
    端接头
    
    子删除BadWordRows()
    Dim currentFile、currentSheet、badWords作为变量、lastRow、i作为整数、baseDirectory作为字符串
    '------------------------------------------------------
    baseDirectory=“c:\folder\”
    badWords=数组(“太阳”,“代码”在“另一个”)
    '------------------------------------------------------
    currentFile=Dir(基本目录)
    而(当前文件“”)
    工作簿。打开baseDirectory+currentFile
    对于工作簿(currentFile).工作表中的每个当前工作表
    lastRow=currentSheet.Cells(currentSheet.Rows.Count,“B”).End(xlUp).Row
    对于j=1到最后一行
    对于i=0到UBound(坏话)
    如果InStr(1,LCase(CStr(currentSheet.Cells(j,“B”).Value)),LCase(baddwords(i)))大于0,则
    currentSheet.行(j).删除
    j=j-1
    lastRow=lastRow-1
    退出
    如果结束
    下一个
    下一个
    下一个
    工作簿(当前文件)。保存
    工作簿(当前文件)。关闭
    currentFile=Dir
    温德
    端接头
    
    考虑使用带有通配符的运算符
    %
    查询字符串搜索的SQL解决方案。Excel for PC可以连接到Jet/ACE SQL引擎(Window.dll文件)并查询工作簿。在这里,除了在工作簿中迭代之外,您可以避免嵌套循环

    下面假设所有工作表都是表格结构,列标题都从A1开始。查询结果将转储到新工作表中,您可以在该工作表中删除当前工作表。确保将占位符替换为实际名称、CurrentWorksheet、ColumnA、NewWorksheet:

    Sub-DeleteSQL()
    Dim conn作为对象,rst作为对象
    Dim strConnection作为字符串,strSQL作为字符串
    作为整数的Dim i
    将wb设置为工作簿
    Dim dirpath作为字符串:dirpath=“C:\\Folder”
    Dim xlfile作为变量:xlfile=Dir(dirpath&“\*.xls*”)
    执行时(xlfile“”)
    设置wb=Workbooks.Open(dirpath&“\”&xlfile)
    Set conn=CreateObject(“ADODB.Connection”)
    Set rst=CreateObject(“ADODB.Recordset”)
    '工作簿连接
    strConnection=“Provider=Microsoft.ACE.OLEDB.12.0;”_
    &“数据源=”&dirpath&“\”&xlfile&“;”_
    &“扩展属性=”“Excel 8.0;HDR=YES;”“
    '打开数据库连接
    连接开放式结构连接
    '打开记录集
    strSQL=“从[当前工作表$]中选择*”_
    &其中[ColumnA]像“%the sun%”或[ColumnA]_
    &“类似于%”中的“%code”或[ColumnA]类似于“%other%””
    rst.打开strSQL,康涅狄格州
    wb.Sheets.Add(之后:=wb.Sheets(wb.Sheets.Count)。Name=“NewWorkSheet”
    '结果集列
    对于i=1到rst.Fields.Count
    工作表(“新工作表”).Cells(1,i)=rst.Fields(i-1).Name
    接下来我
    '结果集数据行
    wb.工作表(“新工作表”).范围(“A2”).复制自记录集rst
    wb.Close为真
    rst.关闭:康涅狄格州关闭
    设置rst=无:设置conn=无
    xlfile=Dir
    环
    端接头
    
    考虑一个SQL解决方案,使用带有通配符的运算符查询字符串搜索,
    %
    。Excel for PC可以连接到Jet/ACE SQL引擎(Window.dll文件)并查询工作簿。在这里,除了迭代工作簿外,您可以避免嵌套循环

    下面假设所有工作表都是表格结构,列标题都从A1开始。查询结果将转储到新工作表中,您可以在新工作表中删除当前工作表。请确保用实际名称、CurrentWorkplace、ColumnA、NewWorkplace替换占位符:

    Sub-DeleteSQL()
    Dim conn作为对象,rst作为对象
    作为S的Dim STR连接
    
    Sub deleteBadWordRows()
        Dim currentFile, currentSheet, badWords As Variant, lastRow, i As Integer, baseDirectory As String
        '------------------------------------------------------
        baseDirectory = "c:\folder\"
        badWords = Array("the sun", "code 'in", "another")
        '------------------------------------------------------
        currentFile = Dir(baseDirectory)
        While (currentFile <> "")
            Workbooks.Open baseDirectory + currentFile
                For Each currentSheet In Workbooks(currentFile).Worksheets
                    lastRow = currentSheet.Cells(currentSheet.Rows.Count, "B").End(xlUp).Row
                    For j = 1 To lastRow
                        For i = 0 To UBound(badWords)
                            If InStr(1, LCase(CStr(currentSheet.Cells(j, "B").Value)), LCase(badWords(i))) > 0 Then
                                currentSheet.Rows(j).Delete
                                j = j - 1
                                lastRow = lastRow - 1
                                Exit For
                            End If
                        Next
                    Next
                Next
            Workbooks(currentFile).Save
            Workbooks(currentFile).Close
            currentFile = Dir
        Wend
    End Sub
    
    Sub DeleteSQL()
        Dim conn As Object, rst As Object
        Dim strConnection As String, strSQL As String
        Dim i As Integer
        Dim wb As Workbook
    
        Dim dirpath As String: dirpath = "C:\\Folder"
        Dim xlfile As Variant: xlfile = Dir(dirpath & "\*.xls*")
    
        Do While (xlfile <> "")            
            Set wb = Workbooks.Open(dirpath & "\" & xlfile)
            Set conn = CreateObject("ADODB.Connection")
            Set rst = CreateObject("ADODB.Recordset")
    
            ' WORKBOOK CONNECTION
            strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                               & "Data Source='" & dirpath & "\" & xlfile & "';" _
                               & "Extended Properties=""Excel 8.0;HDR=YES;"";"            
            ' OPEN DB CONNECTION
            conn.Open strConnection
    
            ' OPEN RECORDSET
            strSQL = " SELECT * FROM [CurrentWorksheet$]" _
                       & " WHERE [ColumnA] LIKE ""%the sun%"" OR [ColumnA]" _
                       & " LIKE ""%code 'in%"" OR [ColumnA] LIKE ""%another%"""
            rst.Open strSQL, conn
    
            wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count).Name = "NewWorkSheet" 
    
            ' RESULTSET COLUMNS
            For i = 1 To rst.Fields.Count
                wb.Worksheets("NewWorkSheet").Cells(1, i) = rst.Fields(i - 1).Name
            Next i      
    
            ' RESULTSET DATA ROWS
            wb.Worksheets("NewWorkSheet").Range("A2").CopyFromRecordset rst
    
            wb.Close True
            rst.Close: conn.Close
            Set rst = Nothing: Set conn = Nothing
    
            xlfile = Dir
        Loop
    End Sub