Как разделить числа на отдельные цифры в Excel

Как разделить числа на отдельные цифры в Excel

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

Спасибо

решение1

Вы хотите, чтобы макрос в 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

решение2

Для полноты картины вот как это сделать без 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. Заполните столько строк, сколько вам нужно. В вашем случае 10 000.

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

Связанный контент