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