0

長い Excel リスト (+10k 行) と注文番号の列があります。残念ながら、一部の注文は削除されました。

私の質問は単純ですが、おそらく達成することはできません。削除された行、基本的に欠落している注文番号を数えたいのです。

ヒントは捨てられます。遠藤

4

5 に答える 5

3

これは、シーケンスから欠落している空白行と数字をカバーします (ただし、最小値/最大値が削除されている場合、これはそれを検出できません)。@shieldgenerator7の答えに似ています。

これにはソートは必要ありません。

編集: sheildgenerator7 が指摘したように、これは、すべての注文番号が連続していると想定していることを前提としています。

=(MAX(A2:A26)-MIN(A2:A26)+1)-COUNTA(A2:A26)

ここに画像の説明を入力

于 2013-04-30T18:09:24.757 に答える
3

Excelコードでこれを行う方法がわかりませんが、一番下に移動して最後の注文番号を取得すると、必要な数を計算できます

last order number - first order number = expected amount

彼らの実際の数はいくつでしょう

last order index - first order index = actual amount

それからあなたはすることができます

expected amount - actual amount = missing order numbers

もちろん、これは注文番号の間に空白行がなく、これを 1 回だけ行う必要があることを前提としています。(スプレッドシートを変更すると、関数または何かが更新されるようにする必要があります)

于 2013-04-30T18:02:44.690 に答える
2

これは、欠落している数字を特定し、必要に応じてリストを新しいワークブックに出力するためにまとめたものです。

最小数と最大数を変更でき、リストがソートされているかどうかは関係ありません。

Sub FindMissingNumbers()
    Dim lstRange As Range
    Dim r As Long
    Dim lowestNumber As Long
    Dim highestNumber As Long
    Dim missingNumbers() As Variant
    Dim m As Long
    Dim wbNew As Workbook

    '## Set this value to the lowest expected value in ordernumber'
    lowestNumber = 0
    '## Set this value to your highest expected value in ordernumber'
    highestNumber = 100

    'Assuming the order# are in column A, modify as needed:'
    Set lstRange = Range("A1", Range("A1048576").End(xlUp))

        For r = lowestNumber To highestNumber
            '## Check to see if this number exists in the lstRange
            If IsError(Application.Match(r, lstRange, False)) Then
                '## Add this number to an array variable:'
                ReDim Preserve missingNumbers(m)
                missingNumbers(m) = r
                m = m + 1
            End If
        Next

        If MsgBox("There were " & m & " missing order numbers" _
            & vbNewLine & "Do you want to print these numbers?", vbYesNo) = vbYes Then
             Set wbNew = Workbooks.Add
                With wbNew.Sheets(1)
                   ' For r = LBound(missingNumbers) To UBound(missingNumbers)
                   ' .Range("A1").Offset(r, 0).Value = missingNumbers(r)
                   ' Next
                    .Range("A1").Resize(UBound(missingNumbers) + 1) = _
                         Application.WorksheetFunction.Transpose(missingNumbers)
                End With

        Else:

        End If

End Sub
于 2013-04-30T18:11:09.237 に答える
2

数字が連続している場合は、非常に簡単です。

注文番号順

B4で数える

=(A4-A3)-1

B17 の合計

=SUM(B3:B16)

ここに画像の説明を入力

于 2013-04-30T18:02:46.823 に答える