Чтобы найти недостающие числа в списке, разделенном запятыми

У меня есть списки, разделенные запятыми в ячейках. Все числа положительные и находятся в пределах от 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)

Я искал решение в Интернете, но не смог найти ничего похожего с числами, разделенными запятыми.

Я был бы рад, если бы у меня было решение здесь. Спасибо.

Какая у вас версия Экселя?

BigBen 24.12.2020 19:13

У меня Эксель 2016.

Max 24.12.2020 19:13

Является ли VBA вариантом? Выполнимо с формулой, но намного проще с VBA IMO.

BigBen 24.12.2020 19:36

конечно. Я знаю макросы.

Max 24.12.2020 19:36
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
4
300
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Прикольно +) к вашему сведению Добавил альтернативу с использованием негативной фильтрации.

T.M. 26.12.2020 21:54

Просто для удовольствия, демонстрируя, как использовать отрицательную фильтрацию:

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

Другие вопросы по теме