在逗号分隔的列表中查找缺失的数字
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
我在单元格中有一个逗号分隔的列表。所有数字都为正数且介于 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