2016-11-04 2 views
0

現在、私は可能な限り多くのVBAを持つ非常に大きなExcelシートを持っています。ループの束、if文などが含まれています。現在、主な停止点は注文データを処理しています。アクセスクエリ - 一致する番号を持つすべての行が別のフィールドに特定の値を返すまで返す

データは(私は非常にそれを簡素化しました)以下と同様の形式でダウンロードされます。Excelで

Order Number  Operation   Sequence 
A1     0     1 
A1     0     2 
A1     L     3 
A1     L     4 
A2     L     1 
A2     0     2 
A3     L     1 
A4     0     1 
A4     L     2 
A4     L     3 
A4     L     4     

、私は注文番号を使用して行を単にループすることができるよと停止動作は "L"です。注文番号を使用して各行を調べ、最初の "L"に達した後にすべてのシーケンスを削除したいと思います。

Order Number  Operation   Sequence 
A1     0     1 
A1     0     2 
A1     L     3 

A2     L     1 

A3     L     1 
A4     0     1 
A4     L     2 

空白行/欠落行は、テーブルから削除する必要があります。

現在のテーブル Access Table Design

+0

私はVBAでこれをやっている可能性があるので、SQLが前のレコードまたは次のレコードを特定できないように見えるから... http://www.access-programmers.co.uk/forums/ showpost.php?p = 601014&postcount = 3 – tjb1

+0

Accessテーブルにもプライマリキーフィールドがある限り、SQLクエリを使用できますが、VBAを使用する方がはるかに簡単です。 – SunKnight0

+0

@ SunKnight0:確かに。レコード/行を介してVBA内の1つのループと、あなたは完了です。 – Gustav

答えて

1

私はこれをテストしていませんが、それはあなたに良い出発点を与えます。それはあなたのAccessテーブルが適切にレコードID主キーでインポートされていると仮定:

DELETE * FROM OrderData WHERE RecordID IN (
    SELECT RecordID FROM OrderData INNER JOIN 
     (SELECT OrderNumber, MIN(Sequence) AS LGS FROM OrderData WHERE Operation='L' GROUP BY OrderNumber) LGR 
     ON OrderData.OrderNumber=LGR.OrderNumber AND OrderData.Sequence>LGR.LGS) 

シーケンスである場合、それは最初に、各注文番号について「L」操作でMIN(シーケンス)を取得された何、そしてすべてのRecordIDsを取得それよりも高く、DELETE条件として使用します。

+0

私は主キーを使ってそれをインポートしましたが、すべての注文が一緒になり、シーケンスを使用して昇順にソートされません。私はソートして以来、それはキーがもはや数値順ではないことを意味します。それは問題だろうか? – tjb1

+0

いいえ、主キーは順番どおりである必要はなく、一意です。シーケンスフィールドは、このクエリの唯一の順序依存フィールドです。 – SunKnight0

+0

これは私に文法上のエラーを与えていますが、何が問題なのかはわかりません。 – tjb1

関連する問題