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

当然,这假设订单号之间没有空白行,并且您只需要这样做一次。(您可能想要一个函数或其他东西在您更改电子表格时对其进行更新)

于 2013-04-30T18:02:44.690 回答
2

如果数字是连续的,那很容易。

按订单号排序

数入 B4

=(A4-A3)-1

B17 中的总和

=SUM(B3:B16)

在此处输入图像描述

于 2013-04-30T18:02:46.823 回答
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

您现在可以在 Excel 中使用一个名为COUNTBLANK. 如果您知道结束行号(例如,如果数据在A1to 中A10000),则可以使用以下公式:

=COUNTBLANK(A1:A10000)
于 2021-03-25T13:15:09.660 回答