Убрать из общего ненужные числа, сложная функция - VBA

Узнай цену своей работы

Формулировка задачи:

Функция не сложить, а снять из общего строка 1) 1, 2. 4, 5, 7 строка 2) 3, 9, 11-14, 17-19 общее количество) 1-20 или писать 20 минус 1, 2. 4, 5, 7 минус 3, 9, 11-14, 17-19 чтобы получить результат такой, остаток 6, 8, 10, 15, 16, 20 ____________ P.S. общее количество может быть любым (эти числа те что выше, в код не пишем)

Решение задачи: «Убрать из общего ненужные числа, сложная функция»

textual
Листинг программы
Function Razvertyvanie(S)
    ' НЕ упорядоченную строку "1, 3-5, 7" преобразует в массив, в котором на каждой позиции:  True -есть номер, False - нет номера на порядковой позиции
    Dim el, Ar(), i&, Z, max&
    max = -1
    For Each el In Split(S, ",")
        Z = Split(el, "-")
        If UBound(Z) > 0 Then
            If max < Val(Z(1)) Then
                max = Val(Z(1))
                ReDim Preserve Ar(max)
            End If
            For i = Val(Z(0)) To Val(Z(1))
                Ar(i) = True
            Next i
        Else
            If max < Val(el) Then
                max = Val(el)
                ReDim Preserve Ar(max)
            End If
            Ar(Val(el)) = True
        End If
    Next el
    Razvertyvanie = Ar
End Function
 
Function VichitanieRange(Ra1 As Range, Ra2 As Range, Ra3 As Range) As String
    Dim i, Ar1, Ar2, Ar3, ArRez
    If Val(Ra1.Value) > 0 Then
        ReDim Ar1(Ra1.Value)
        For i = 1 To Ra1.Value ' Полный комплект
            Ar1(i) = True
        Next i
        If Ra2.Value <> "" Then
            Ar2 = Razvertyvanie(Ra2.Value)
            ArRez = Vichitanie(Ar1, Ar2)
        Else
            ArRez = Ar1
        End If
        If Ra3.Value <> "" Then
            Ar3 = Razvertyvanie(Ra3.Value)
            ArRez = Vichitanie(ArRez, Ar3)
        End If
        VichitanieRange = SjatieArray(ArRez)
    End If
End Function
 
Function Хитрый_счёт_в_ячейке%(Строка)
    Dim Ar, i&
    Хитрый_счёт_в_ячейке = 0
    If Trim(Строка) <> "" Then
        Ar = Razvertyvanie(Строка)
        For i = 1 To UBound(Ar)
            If Ar(i) Then Хитрый_счёт_в_ячейке = Хитрый_счёт_в_ячейке + 1
        Next i
    End If
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5
Похожие ответы