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

1

Alguém conhece uma maneira bastante simples de dividir números de vários tamanhos em dígitos separados e manipular cada dígito? Provavelmente poderia fazê-lo no próprio Excel, mas pensar em uma macro seria melhor, pois estou interessado apenas em uma lista de resultados que atendem a alguns critérios. Exemplo: 1234 é dividido em 1, 2, 3 e 4. Cada um deles é então 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. Ele fará isso para todos i = 1 a 10000, criando uma lista apenas dos números que atendem à restrição.

Obrigado

    
por Robert P. 17.05.2015 / 12:26

2 respostas

0

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 é um caminho.

Percorra o intervalo de números e, para cada conversão de número, uma sequência de caracteres, por exemplo, sValor = Trim (Str (I))

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

por exemplo.     Para J = 1 Para Len (sValue)         Resultado = Resultado + (Val (Meados (sText, J, 1)) ^ 2)     Próximo J

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

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

Aqui está um exemplo que acabei de inventar e acho que funciona bem para o seu exemplo (fornece 3711 linhas de respostas), apenas altere os valores Const para os 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
    
por 17.05.2015 / 15:04
1

Para completar, veja como fazer isso sem o VBA:

  1. Insira esta fórmula de matriz em B1 com Ctrl + Deslocamento + Digite

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

  2. Digite esta fórmula em A1 :

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

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

  4. Filtre para ocultar os valores de 0 na coluna A OU copie / cole os valores e, em seguida, classifique A e exclua todas as linhas com um valor de 0 .
por 18.05.2015 / 15:55