繁体   English   中英

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

[英]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)

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

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

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

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

帮助 function 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM