システムwiki

Office:一連の数字から欠落している数字を見つける

StevenD 受付中 最終更新日:2020-08-19 23:45

Microsoft Accessで一連の番号から欠落している番号を見つけるためのヘルプを探しています.

以下のスレッドを使用しましたが、エラーが発生します.

access-database-how-to-find-missing-numbers- in-a ...

私のクエリは次のとおりです:

SELECT([KFO NO] +1)AS MissingFrom、DMin( "KFO NO"、 "MAIN TABLE"、 "KFO NO>"&[KFO NO])AS MissingUntil

[メインtable]から

WHERE(((DMin( "KFO NO"、 "MAIN TABLE"、 "KFO NO>"&[KFO NO]))<>([KFO NO] +1)));

以下は、私が使用しているtableと、オープンスペースを検索したい列です.

理想的には、このクエリは上記のリストから利用可能な範囲を吐き出します.つまり、13087から13139、13141から13199、11196から11472などと言います.

返信リスト(回答:4)

1 #
TomvanS

これはおそらくあなたを正しい方向に導く可能性があります:

リンク:Qry.

2 #
KenSher

表の値が英数字の文字列式であるため、数値を数値的に比較できる数字を返すようにval関数を呼び出す必要があります.欠落範囲の開始と終了の数字を補助カウンタ表に入力するには
クエリで使用できます.これは、操作table内の最大数よりも大きい1から任意の数字までのすべてのシーケンシャル番号の表で、Excelの列を直列に記入してからワークシートをインポートすることで簡単に作成できます.
tableとしてアクセスする.その後、クエリは次のようになります StartOfRangeとしてNZ(EmptyRanges.StartOfRange、1)を選択します. EmptyRanges.endOfrange、endofrange-startofrange + 1 SizeOfRange
(Distinct Select
> (MAXを選択(val([kfo no]))+ 1
[メインtable]
StartOfRangeとしてval([kfo no]) (最小(val([kfo no]))-1
[メインtable]
val([kfo no])>Counters.Counter)EndOfrangeとして
カウンターから



(Select*
[メインtable]
val([kfo no])= Counters.Counter)
そしてカウンター<
(MAXを選択(val([kfo no]))
[メインtable]から空のようなものとして.
上記のクエリは、MissingNumbers.zipのONSのONSのON:
に適応しています. https://onedrive.live.com/?cid=44cc60d7fea42912&id=44cc60d7fea42912年169.
この小さなデモファイルは、上記のように整数の順序または欠けている範囲からのすべての欠けた数字を返すためのクエリを示しています.

応答2# ->にスキップ
3 #
StevenD

だから、私がそれを試したとき...私はこれを出力として得ました.

私がもっと見たいこと、例としてあなたのissisNumbers.zipファイルが持っていたのようなものとして、すべての欠品番号のリスト.

この場合、最善が尽力しているのは、どの番号を使用していないかを守るためのリストが生成されることです.フィールドに文字を持つものを除外して大丈夫です.

応答3# ->にスキップ
4 #
KenSher

まず、次の関数をデータベースの標準モジュールに追加します.モジュールは、関数またはデータベース内の他のオブジェクトとは異なる名前で保存してください.
パブリック関数RemoveAlpha(strAlphaNum As String )As Long
Dim strChr As String
Dim strRemoveAlpha As String
Dim n As Integer
For n=1 To Len(strAlphaNum)
strChr=Mid(strAlphaNum、n、1)
If Asc(strChr)>= 48 And Asc(strChr)<= 57 Then
strRemoveAlpha=strRemoveAlpha&strChr
End If
Next n
RemoveAlpha=Val(strRemoveAlpha)
End関数
次に、私のデモのクエリで関数を呼び出します.
SELECT Counter
FROM Counters LEFT JOIN Sequence
ON Counters.Counter=RemoveAlpha(Sequence.SeqNumber)
WHERE SeqNumber IS NULL
ANDカウンター<
(SELECT MAX(RemoveAlpha(SeqNumber))
FROM Sequence)
ORDER BY Counter;
tableと列の名前を独自のものに変更する必要があります.