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