Убрать из общего ненужные числа, сложная функция - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д