Como dividir números em dígitos separados no Excel

Como dividir números em dígitos separados no Excel

Alguém conhece uma maneira bastante simples de dividir números de vários comprimentos em dígitos separados e depois manipular cada dígito? Provavelmente poderia fazer isso no próprio Excel, mas pensar que uma macro seria melhor, pois estou interessado apenas em uma lista de resultados que atenda a alguns critérios. Exemplo: 1234 é dividido em 1, 2, 3 e 4. Cada um deles é então elevado ao quadrado e a soma dos quadrados é retornada como um número (1 ^ 2 + 2 ^ 2 + 3 ^ 2 + 4 ^ 2 = 30 ) Agora, somente se o resultado puder ser dividido por um número escolhido, digamos 3, a macro preencherá uma célula com o número fornecido e seu resultado correspondente: A1 = 1234, A2 = 30. Ela fará isso para todos os i = 1 para 10.000, criando uma lista apenas dos números que atendem à restrição.

Obrigado

Responder1

Você deseja que a macro no Excel VBA faça isso ou apenas um ponteiro em uma direção?

Esta pode não ser a maneira mais eficiente, mas é uma delas.

Percorra o intervalo de números e, para cada número, converta em uma String, por exemplo, sValue = Trim(Str(I))

então, para cada dígito em LEN (sValue), você obtém o valor e o eleva ao quadrado

por exemplo, para J = 1 para Len(sValue) Resultado = Resultado + (Val(Mid(sText, J, 1)) ^ 2) Próximo J

Assim que tiver um Resultado, execute os critérios solicitados e confirme que é um número inteiro (por exemplo) por exemplo (Resultado/Divisor) = Rodada(Resultado/Divisor, 0)

e coloque seus resultados nas células necessárias. Repita para quantas iterações forem necessárias (por exemplo, 10.000)

Aqui está um exemplo que acabei de criar e acho que funciona bem para o seu exemplo (fornece 3.711 linhas de respostas), basta alterar os valores Const de acordo com seus requisitos.

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

Responder2

Para completar, veja como fazer isso sem VBA:

  1. Insira esta fórmula de matriz B1com Ctrl+ Shift+Enter

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

  2. Insira esta fórmula em A1:

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

  3. Preencha quantas linhas desejar. 10.000 no seu caso.

  4. Filtre para ocultar os valores 0na coluna AOU copie/cole os valores e, em seguida, classifique Ae exclua todas as linhas com o valor 0.

informação relacionada