Убрать из общего ненужные числа, сложная функция - 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
Листинг программы
  1. Function Razvertyvanie(S)
  2.     ' НЕ упорядоченную строку "1, 3-5, 7" преобразует в массив, в котором на каждой позиции:  True -есть номер, False - нет номера на порядковой позиции
  3.    Dim el, Ar(), i&, Z, max&
  4.     max = -1
  5.     For Each el In Split(S, ",")
  6.         Z = Split(el, "-")
  7.         If UBound(Z) > 0 Then
  8.             If max < Val(Z(1)) Then
  9.                 max = Val(Z(1))
  10.                 ReDim Preserve Ar(max)
  11.             End If
  12.             For i = Val(Z(0)) To Val(Z(1))
  13.                 Ar(i) = True
  14.             Next i
  15.         Else
  16.             If max < Val(el) Then
  17.                 max = Val(el)
  18.                 ReDim Preserve Ar(max)
  19.             End If
  20.             Ar(Val(el)) = True
  21.         End If
  22.     Next el
  23.     Razvertyvanie = Ar
  24. End Function
  25.  
  26. Function VichitanieRange(Ra1 As Range, Ra2 As Range, Ra3 As Range) As String
  27.     Dim i, Ar1, Ar2, Ar3, ArRez
  28.     If Val(Ra1.Value) > 0 Then
  29.         ReDim Ar1(Ra1.Value)
  30.         For i = 1 To Ra1.Value ' Полный комплект
  31.            Ar1(i) = True
  32.         Next i
  33.         If Ra2.Value <> "" Then
  34.             Ar2 = Razvertyvanie(Ra2.Value)
  35.             ArRez = Vichitanie(Ar1, Ar2)
  36.         Else
  37.             ArRez = Ar1
  38.         End If
  39.         If Ra3.Value <> "" Then
  40.             Ar3 = Razvertyvanie(Ra3.Value)
  41.             ArRez = Vichitanie(ArRez, Ar3)
  42.         End If
  43.         VichitanieRange = SjatieArray(ArRez)
  44.     End If
  45. End Function
  46.  
  47. Function Хитрый_счёт_в_ячейке%(Строка)
  48.     Dim Ar, i&
  49.     Хитрый_счёт_в_ячейке = 0
  50.     If Trim(Строка) <> "" Then
  51.         Ar = Razvertyvanie(Строка)
  52.         For i = 1 To UBound(Ar)
  53.             If Ar(i) Then Хитрый_счёт_в_ячейке = Хитрый_счёт_в_ячейке + 1
  54.         Next i
  55.     End If
  56. End Function

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


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

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

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы