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