1

Кто-нибудь знает довольно простой способ разбить числа различной длины на отдельные цифры и затем манипулировать каждой цифрой? Возможно, это можно сделать и в самом Excel, но думать о макросе было бы лучше, поскольку меня интересует только список результатов, соответствующих нескольким критериям. Пример: 1234 делится на 1, 2, 3 и 4. Каждый из них затем возводится в квадрат, а сумма квадратов возвращается как число (1 ^ 2 + 2 ^ 2 + 3 ^ 2 + 4 ^ 2 = 30). Теперь, только если результат может быть разделен на выбранное число, скажем, 3, макрос заполнит ячейку с указанным номером и соответствующим результатом: A1 = 1234, A2 = 30. Это будет сделано для всех i = 1 до 10000, создавая список только тех чисел, которые удовлетворяют ограничению.

Спасибо

2 ответа2

1

Для полноты вот как это сделать без VBA:

  1. Введите эту формулу массива в B1 с помощью Ctrl+Shift+Enter

    {=SUMSQ(1*MID(ROW(),ROW(OFFSET($A$1,,,LEN(ROW()))),1))}

  2. Введите эту формулу в A1:

    =IF(MOD(B1,3)=0,ROW(),0)

  3. Заполните столько строк, сколько хотите. 10000 в вашем случае.

  4. Фильтруйте, чтобы скрыть значения 0 в столбце A ИЛИ скопируйте / вставьте значения, а затем отсортируйте A и удалите все строки со значением 0 .
0

Вы хотите, чтобы макрос в Excel VBA делал это или просто указатель в направлении?

Это может быть не самый эффективный способ, но это один из способов.

Просмотрите диапазон чисел и для каждого числа преобразуйте в строку, например, sValue = Trim(Str(I))

затем для каждой цифры в LEN(sValue) вы получаете значение и возводите его в квадрат

например, для J = 1 до Len(sValue) Результат = Результат + (Val (Mid (sText, J, 1)) ^ 2) Следующий J

Получив результат, выполните запрошенные критерии и подтвердите, что это целое число (например), например, (Результат / делитель) = Раунд (Результат / делитель, 0).

и поместите ваши результаты в необходимые ячейки. Повторите для столько итераций, сколько вам нужно (например, 10000)

Вот пример, который я только что составил, и я думаю, что он хорошо работает для вашего примера (дает 3711 строк ответов), просто измените значения Const для ваших требований.

Sub SplitNumber()
Const StartRange = 1
Const EndRange = 10000
Const Divisor = 3
Const InputCol = 1
Const ResultCol = 2

Dim StartRow, Result As Integer
Dim sValue As String

StartRow = 1
I = StartRange
CurrentRow = StartRow

While I <= EndRange
    sValue = Trim(Str(I))
    Result = 0
    If Len(sValue) > 1 Then
        For J = 1 To Len((sValue))
            Result = Result + (Val(Mid(sValue, J, 1)) ^ 2)
        Next J
    Else
        Result = Val(sValue) ^ 2
    End If
    If (Result / Divisor) = Round(Result / Divisor, 0) Then
        Cells(CurrentRow, InputCol) = I
        Cells(CurrentRow, ResultCol) = Result
        CurrentRow = CurrentRow + 1
    End If
    I = I + 1
Wend

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .