在逗号分隔的列表中查找缺失的数字

To find the missing numbers in a comma-separated list

我在单元格中有一个逗号分隔的列表。所有数字都为正数且介于 1 和 10 之间。

示例:

如果我在 A1: (2,3,5,6) 中有,我希望在 B1:(1,4,7,8,9,10) 中有缺失的数字。

如果A2: (1,10),那么我会在B2:(2,3,4,5,6,7,8,9)

如果A3: (7),那么我会在B2:(1,2,3,4,5,6,8,9,10)

我在网上搜索了一个解决方案,但找不到类似的逗号分隔数字。

如果我能在这里找到解决方案,我会很高兴。谢谢。

这是一个应该完成此任务的用户定义函数...可能可以优化。

Public Function MissingNumbers(ByVal numberList As String) As String
    Dim temp As String
    temp = Replace(numberList, "(", "")
    temp = Replace(temp, ")", "")
    
    Dim arr As Variant
    arr = Split(temp, ",")
    
    Dim newNumbers As String
    newNumbers = "1,2,3,4,5,6,7,8,9,10,"
    
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        newNumbers = Replace(newNumbers, arr(i) & ",", "")
    Next

    newNumbers = "(" & Left$(newNumbers, Len(newNumbers) - 1) & ")"
    MissingNumbers = newNumbers
End Function

只是为了好玩演示如何使用负过滤:

Function MissingList(ByVal numberList As String) As String
    Dim given: given = Split(Mid(numberList, 2, Len(numberList) - 2), ",")
    Dim series: series = GetSeries()    ' i.e. numbers 1..10
    Dim i As Long
    For i = 0 To UBound(given)
        series = Filter(series, given(i), False)    ' << negative filtering
    Next
    MissingList = "(" & Replace(Join(series, ","), "0", "10") & ")"
End Function

由于Filter在1..10系列中执行部分搜索,10必须临时替换为唯一的0

帮助功能GetSeries()

Function GetSeries()
' Purpose: get numbers 1..10
    Const LAST As Long = 10: Const FIRST = 1
    Dim tmp: tmp = Application.Transpose(Evaluate("row(" & FIRST & ":" & LAST & ")"))
    tmp(LAST) = 0           ' replace 10 by 0 as search item 1 would filter out value 10, too
    GetSeries = tmp
End Function