3

私は通常、この作業のほとんどを Excel 2007 で行っていますが、処理する必要のあるデータを管理するのに Excel が適切なツールだとは思いません。そのため、Excel スプレッドシートを Access 2007 db に変換しようとしていますが、これは問題なく実行できますが、スプレッドシートに何かを行う前に、結果の情報を使用するためにデータをクリーンアップするプロセスを実行します。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 の文字タイプがありますが、Access 2007 で同じプロセスを複製したいのですが、方法がわかりません。

この問題についてご協力いただきありがとうございます

4

4 に答える 4

3

Access 内では、ステートメントを実行しDELETEて、フィールドの値が空の文字列 ("") であるか、パターンの 1 つに一致する行を破棄できます。

DELETE FROM YourTable
WHERE
       YourField = ""
    OR YourField ALike "511-%"
    OR YourField ALike "CARL-%";

インデックスを使用すると、WHERE 句でのパターン マッチングにより、スプレッドシート マクロなどYourFieldの関数を使用したクエリよりもパフォーマンスが大幅に向上する可能性があります。Left()IOW、次のクエリでは、db エンジンが のすべての行でこれらの Left() 式を実行する必要がありますYourTable。しかし、上記のクエリとYourFieldインデックスを使用すると、db エンジンは単純に一致する行を選択することができます。これは簡単に 1 桁速くなります。

DELETE FROM YourTable
WHERE
       YourField = ""
    OR Left(YourField, 4) = "511-"
    OR Left(YourField, 5) = "CARL-";
于 2012-07-04T14:45:24.937 に答える
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-")
于 2012-07-04T15:30:19.897 に答える
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
于 2012-07-04T15:38:00.617 に答える
0

SQL 言語を使用してデータベース データを管理します。アクセスについては、以下を確認してください。

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
于 2012-07-04T14:46:43.113 に答える