Formato de número expresado en decenas y elevado al cuadrado en VBA

Felicitarlos por el apoyo constante en los problemas de programación. En esta oportunidad quisiera hacer la siguiente consulta:

Como puedo expresar un número de una celda de Excel (por ejemplo: 1300 o 15600) en un formato donde se representen las dos primeras cifras significativas y quede multiplicado por diez (10) elevado al exponente necesario. De esta forma: 1300 = 13 x 10^2 ó 15600 = 16 x 10^3. Por ejemplo apretando un botón y que los convierta al formato que necesito.

Además, que los exponentes aparezcan como superíndices. Necesito su ayuda, estaré atento a alguna sugerencia.

Respuesta
2

Pon tus números en la columna A, tal como se muestra en el siguiente ejemplo:


Ejecuta la macro y te pondrá en la columna B la "notación científica".

Sub Exponente()
'Por Dante Amor
    'Representar un número con exponencial
    '
    Application.ScreenUpdating = False
    col = "A"
    For i = 2 To Range(col & Rows.Count).End(xlUp).Row
        Set celda = Cells(i, col)
        valor = celda.Value
        largo = Len(valor)
        If largo < 2 Then
            valor = Format(valor, "00")
            largo = 2
        End If
        expon = largo - 2
        num = Val(1 & String(expon, "0"))
        entero = Val(Left(valor, 2))
        dec = Val(Mid(valor, 3))
        dec2 = dec / num
        redo = Round(dec2)
        entero = entero + redo
        celda.Offset(0, 1).Value = Format(entero, "00") & " x 10 " & expon
        With celda.Offset(0, 1).Characters(Start:=9, Length:=1).Font
            .Superscript = True
        End With
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub
'


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Estimado Dante,

He seguido muchas de tus soluciones y veo que tienes un dominio bastante amplio de estos temas, eres de una ayuda enorme. La solución que me planteaste funciona casi a la perfección. Solo quería preguntarte si habría la manera de que el exponente quede sin espacio después de la base 10. Si hay alguna manera te lo agradecería. Atento, como siempre, a tus comentario.

Te anexo la macro actualizada

Sub Exponente()
'Por Dante Amor
    'Representar un número con exponencial
    '
    Application.ScreenUpdating = False
    col = "A"
    For i = 2 To Range(col & Rows.Count).End(xlUp).Row
        Set celda = Cells(i, col)
        valor = celda.Value
        largo = Len(valor)
        If largo < 2 Then
            valor = Format(valor, "00")
            largo = 2
        End If
        expon = largo - 2
        num = Val(1 & String(expon, "0"))
        entero = Val(Left(valor, 2))
        dec = Val(Mid(valor, 3))
        dec2 = dec / num
        redo = Round(dec2)
        entero = entero + redo
        celda.Offset(0, 1).Value = Format(entero, "00") & " x 10" & expon
        With celda.Offset(0, 1).Characters(Start:=8, Length:=1).Font
            .Superscript = True
        End With
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub
'

Al final de mi respuesta hay un botón para valorar: Votar o Excelente.

Genial, la macro funciona bien estimado Dante Amor. Sin embargo he encontrado un error que sucede con algunos números, por ejemplo en los siguientes casos:

Ejecutando la macro me devuelve: 1.5 = 01 x 10^1, 17.5 = 17 x 10^2, 135.6 = 13 x 10^3

Debería devolverme los valores así: 1.5 = 02 x 10^0, 17.5 = 18 x 10^0, 135.6 = 14 x 10^1

Por favor, necesito tu ayuda para concluir con esta rutina. Quedo atento a tus comentarios.

En tus ejemplos no pusiste decimales, es por que eso que no están considerados.

Valora la respuesta y lo reviso.

Es verdad, sin embargo pensé que tomaría cualquier número y podría redondearlo y pasarlo a la notación que te había comentado. Esperaré tu revisión estimado Dante.

Va la macro actualizada

Sub Exponente()
'Por Dante Amor
    'Representar un número con exponencial
    '
    Application.ScreenUpdating = False
    col = "A"
    For i = 2 To Range(col & Rows.Count).End(xlUp).Row
        Set celda = Cells(i, col)
        valor = Round(celda.Value, 0)
        largo = Len(valor)
        If largo < 2 Then largo = 2
        expon = largo - 2
        num = Val(1 & String(expon, "0"))
        entero = Val(Left(valor, 2))
        entero = entero + Round(Val(Mid(valor, 3)) / num)
        celda.Offset(0, 1).Value = Format(entero, "00") & " x 10" & expon
        With celda.Offset(0, 1).Characters(Start:=8, Length:=1).Font
            .Superscript = True
        End With
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub
'

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas