我通常在Excel 2007中完成大部分工作,但我不认为excel是管理我需要处理的数据的正确工具。所以我试图将excel电子表格转换为Access 2007数据库,我可以毫无问题地进行操作,但在对电子表格做任何事情之前,我会经历清理其中数据的过程,以便使用结果信息。在excel中我使用一个宏,如下面的
Sub deletedExceptions_row()
Dim i As Long
Dim ws As Worksheet
On Error GoTo whoa
Set ws = Sheets("data")
With ws
For i = .Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If .Cells(i, 3) = "" Or _
VBA.Left(.Cells(i, 3), 4) = "511-" Or _
VBA.Left(.Cells(i, 3), 5) = "CARL-" Then
.Rows(i).Delete
End If
Next i
End With
Exit Sub
whoa:
MsgBox "Value of i is " & i
End Sub
删除电子表格中不必要的记录,如何在Access 2007中完成相同的操作。
宏正在查找特定部分或者更确切地说是记录的第3个字段的前几个字符,以确定是否需要删除整个记录(例如511-QWTY-SVP或CARL-52589- 00)。总共大约有180种这样的字符类型会影响需要从电子表格中删除的1000行,但我想在Access 2007中复制相同的过程,但不知道如何。
感谢您所有对此问题的帮助
答案 0 :(得分:3)
在Access中,您可以执行DELETE
语句来丢弃字段中的值为空字符串(“”)或与您的某个模式匹配的行。
DELETE FROM YourTable
WHERE
YourField = ""
OR YourField ALike "511-%"
OR YourField ALike "CARL-%";
对于YourField
索引,WHERE子句中的模式匹配相对于使用Left()
函数(例如您使用的电子表格宏)的查询提供了潜在的大幅提升。 IOW,以下查询将要求db引擎在YourTable
的每一行上运行那些Left()表达式。但是通过上面的查询和YourField
索引,数据库引擎可以简单地选择匹配的行...这可以很快地快一个数量级。
DELETE FROM YourTable
WHERE
YourField = ""
OR Left(YourField, 4) = "511-"
OR Left(YourField, 5) = "CARL-";
答案 1 :(得分:3)
Sub DeleteRows(strVal as string)
strVal = Trim(strVal)
if strVal = "" then exit sub
dim dbs as Database
set dbs = CurrentDB
dbs.execute "Delete * FROM YOURTABLE where YOURFIELD Like '" & strVal & "*'"
set dbs = Nothing
End Sub
然后为每个项目调用
DeleteRows("Carl-")
DeleteRows("511-")
答案 2 :(得分:2)
鉴于您有180个可能的问题行,创建问题列表表可能是有意义的。例如:
<强> ExcelImport 强>
ID ARow
1 Carl-abdre
2 511-ferw2
3 wywr-carl
4 123-456
<强> ProblemList 强>
Problem
511-
Carl-
<强>查询强>
DELETE
FROM ExcelImport
WHERE ExcelImport.ID In (
SELECT ID
FROM ExcelImport, ProblemList
WHERE ARow Like [Problem] & "*" Or ARow & ""="")
查询后的ExcelImport
ID ARow
3 wywr-carl
4 123-456
答案 3 :(得分:0)
您使用SQL语言管理数据库数据。对于Access,请检查:
http://msdn.microsoft.com/en-us/library/bb177896%28v=office.12%29.aspx
Sub DeleteX()
Dim dbs As Database, rst As Recordset
Set dbs = OpenDatabase("Northwind.mdb")
dbs.Execute "DELETE * FROM " _
& "Employees WHERE Title ALike 'FOOBAR-%';"
dbs.Close
End Sub