Cómo dividir números en dígitos separados en Excel

Cómo dividir números en dígitos separados en Excel

¿Alguien conoce una forma bastante sencilla de dividir números de distinta longitud en dígitos separados y luego manipular cada dígito? Probablemente podría hacerlo en Excel, pero sería mejor pensar en una macro, ya que solo me interesa una lista de resultados que cumplan con algunos criterios. Ejemplo: 1234 se divide en 1, 2, 3 y 4. Luego, cada uno de estos se eleva al cuadrado y la suma de los cuadrados se devuelve como un número (1^2 + 2^2 + 3^2 + 4^2 = 30 ) Ahora, sólo si el resultado se puede dividir por un número elegido, digamos 3, la macro llenará una celda con el número dado y su resultado correspondiente: A1 = 1234, A2 = 30. Hará esto para todo i = 1 a 10000, creando una lista de solo los números que cumplen la restricción.

Gracias

Respuesta1

¿Quiere que la Macro en Excel VBA haga esto o simplemente un puntero en una dirección?

Puede que esta no sea la forma más eficiente, pero es una forma.

Revise el rango de números y para cada número convierta a una cadena, por ejemplo, sValue = Trim(Str(I))

luego, para cada dígito en LEN (sValue), obtienes el valor y lo elevas al cuadrado.

por ejemplo, para J = 1 a Len(sValue) Resultado = Resultado + (Val(Mid(sText, J, 1)) ^ 2) Siguiente J

Una vez que tenga un resultado, ejecute los criterios solicitados y confirme que sea un número entero (por ejemplo), por ejemplo (Resultado/Divisor) = Ronda (Resultado/Divisor, 0).

y coloque sus resultados en las celdas requeridas. Repita tantas iteraciones como necesite (por ejemplo, 10000)

Aquí hay una muestra que acabo de crear y creo que funciona bien para su ejemplo (da 3711 filas de respuestas), simplemente cambie los valores de Const según sus 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

Respuesta2

Para completar, aquí se explica cómo hacerlo sin VBA:

  1. Ingrese esta fórmula matricial B1con Ctrl+ Shift+Enter

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

  2. Introduzca esta fórmula en A1:

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

  3. Complete tantas filas como desee. 10.000 en tu caso.

  4. Filtre para ocultar los valores de 0en la columna AO copie/pegue valores y luego ordene Ay elimine todas las filas con un valor de 0.

información relacionada