VBA Excel - проверка на нулевые цифры до и после определённых цифр числа

Возьмём число в пределах от 1 до 1 000 000 000 000 000, где жирным шрифтом для примера выделен класс разрядов числа, который будем проверять. Необходимо проверить условие, при котором классы до него (тысячи и единицы) являются пустыми. Отдельно необходимо проверить условие, при котором пустыми являются классы после выделенного (миллиарды, триллионы и квадриллионы). Если первое условие истинно, а второе нет, результат должен быть истинным, в противном случае ложным. Проблема в том, что у меня не получается сделать цикл этого кода для всех классов разрядов. Число мы поделили на классы примерно вот так:

For i1 = 1 To 6 'i1 - номер класса разрядов справа налево
x = Fix(x) / 1000 'x - исходное число
y(i1) = (x - Fix(x)) * 1000 'y(i1) - группа цифр в каждом классе
Next

Классы поделили на разряды вот так:

For i2 = 1 To 6 'i2 - номер класса разрядов справа налево
y1 = y(i2) Mod 10 'y1 - цифра разряда сотен каждого класса
y2 = (y(i2) - y1) / 10 Mod 10 'y2 - цифра разряда десятков каждого класса
y3 = y(i2) \ 100 'y3 - цифра разряда единиц каждого класса
Next

На примере числа 1 235 000 687 000 000 должно получиться вот это:

fffttt

На примере числа 225 485:

ffffft

На примере числа 200 000:

ffffft

и т. д.


Ответы (1 шт):

Автор решения: vikttur
Sub test()
    Const x As Double = 1234567

    Debug.Print fCheckClasses(x)
End Sub

Function fCheckClasses(x As Double) As String
    Dim i As Long
    
    For i = 3 To Len(x & "") Step 3
        If Int(x Mod 10 ^ i) > 0 Then Exit For
    Next i
    
    If i >= Len(x & "") Then i = i - 3
    i = i / 3
    fCheckClasses = Left$("ffffff", 6 - i) & Left$("ttttt", i)
End Function

Может, достаточно определения i и не нужно String рисовать?

→ Ссылка