我有一个很长的 excel 列表(+10k 行)和一个带有订单号的列。不幸的是,一些订单被删除了。
我的问题很简单,但可能无法实现:我想计算已删除的行,基本上是缺少的订单号。
有一个提示。远藤
我有一个很长的 excel 列表(+10k 行)和一个带有订单号的列。不幸的是,一些订单被删除了。
我的问题很简单,但可能无法实现:我想计算已删除的行,基本上是缺少的订单号。
有一个提示。远藤
这涵盖了序列中缺少的空白行和数字(但是,如果您的最小值/最大值被删除,则无法检测到)。这类似于@shieldgenerator7 的回答。
无需为此进行排序。
编辑:正如 sheildgenerator7 指出的那样,这假设您希望所有订单号都是连续的。
=(MAX(A2:A26)-MIN(A2:A26)+1)-COUNTA(A2:A26)
我不知道如何使用 Excel 代码执行此操作,但是如果您走到底部并获取最后一个订单号,您可以计算出应该有多少
last order number - first order number = expected amount
他们实际上是多少
last order index - first order index = actual amount
然后你可以做
expected amount - actual amount = missing order numbers
当然,这假设订单号之间没有空白行,并且您只需要这样做一次。(您可能想要一个函数或其他东西在您更改电子表格时对其进行更新)
如果数字是连续的,那很容易。
按订单号排序
数入 B4
=(A4-A3)-1
B17 中的总和
=SUM(B3:B16)
这是我汇总的一些内容,用于识别缺失的数字,并可选择将列表打印在新工作簿上。
您可以更改最小和最大数量,列表是否排序无关紧要。
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
您现在可以在 Excel 中使用一个名为COUNTBLANK
. 如果您知道结束行号(例如,如果数据在A1
to 中A10000
),则可以使用以下公式:
=COUNTBLANK(A1:A10000)