【问题标题】:To find the missing numbers in a comma-separated list在逗号分隔的列表中查找缺失的数字
【发布时间】:2021-04-03 02:43:22
【问题描述】:

我在单元格中有一个逗号分隔的列表。所有数字都是正数,介于 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)

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

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

【问题讨论】:

  • 你有什么版本的 Excel?
  • 我有 Excel 2016。
  • 可以选择 VBA 吗?使用公式可行,但使用 VBA IMO 更容易。
  • 当然。我知道宏。

标签: excel vba excel-formula excel-2016


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • 非常感谢,BigBen。这正是我所需要的。
    • Nice +) fyi 添加了使用负过滤的替代方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多