Hace unos días, realizando un pequeño programa de cálculo a través un userform, donde ingresaba números, realizaba operaciones y finalmente volcaba los datos a una celda de una hoja Excel, me di cuenta que tenía un problema, él resultado de la fórmula quedaba grabado en la celda como un número almacenado como texto.
Esto era un problema, sobre todo porque a partir de ese resultado tenía que realizar otras operaciones y algunos formatos condicionales que no funcionan si trabajamos con números «corrientes» y números almacenados con formato de texto.
La solución fue mucho más sencilla de lo que me esperaba. Os expongo aquí un ejemplo, primero el problema y luego la solución.
Imaginemos la siguiente macro, que lo que hace es trasladar los números de la "hoja2"
a la "hoja1"
en la celda 1 de la columna 1 y en la celda 1 de la columna 2.
Pues bien, si los números están almacenados como texto en la "hoja2"
los trasladará a la «hoja1» con el mismo formato. (para probar podéis poner un número cualquiera en las celdas comentadas precedido de un apóstrofe, ej. ’45 de esta forma es como si fuese texto).
Private Sub Número_texto()
Application.Worksheets(«Hoja1»).Cells(1, 1) = (Hoja2.Cells(1, 1))
Application.Worksheets(«Hoja1»).Cells(1, 2) = (Hoja2.Cells(1, 2))
End Sub
La solución, y os dejo la macro completa:
Private Sub UserForm_Click()
Application.Worksheets(«Hoja1»).Cells(1, 1) = CDbl(Hoja2.Cells(1, 1))
Application.Worksheets(«Hoja1»).Cells(1, 2) = CDbl(Hoja2.Cells(1, 2))
Application.Worksheets(«Hoja1»).Columns(1).NumberFormat = «#,##0»
Application.Worksheets(«Hoja1»).Columns(2).NumberFormat = «#,##0»
End Sub
La clave está en colocar la función CDbl justo delante de los datos que se refieren a la «hoja2», de esta forma formatearemos los número almacenados como texto en números «corrientes».
Adicionalmente os dejo también la posibilidad de darle un formato visual más estético a las cantidades definiendo el punto separador de los miles: .NumberFormat = "#,##0"
Espero que os haya ayudado este pequeño truco, a mi me ha solucionado un problema importante y sobre todo me ha ahorrado mucho tiempo en buscar soluciones alternativas.
Saludos 😉
me sirvio gracias
mi problema
.Cells(NewRow, 2).Value = Me.txtcamp
.Cells(NewRow, 3).Value = Me.txtplan
mi solucion
.Cells(NewRow, 2).Value = CDbl(Me.txtcamp)
.Cells(NewRow, 3).Value = CDbl(Me.txtplan)
Perfecto mardenMatos 🙂 buena solución, me alegro que te haya servido.
Muchas gracias. Saludos
Estimado, mil disculpa me llamo mucho la atención su solución pero si en ves de pasar los datos de una hoja a otra lo que se quiere es que evalué la columna y convierta la columna Z
Hola Carlos,
Supongo que te refieres a en una hoja formatear la columna Z con número almacenados como texto a números corrientes. Bien puedes hacerlo utilizando la función CDbl para igualar formatos y luego pasar el formato a número.
Sub FORMAT()
Dim i As Double
fin = Application.CountA(Range("Z:Z"))
For i = 2 To fin
Cells(i, 26).Value = CDbl(Cells(i, 26).Value)
Cells(i, 26).NumberFormat = "0"
Next i
End Sub
Con esta sencilla macro, formateas la columna Z (26), según el proceso que tengas, prueba con CDbl o con numberfomat.
Espero que te sirva. Si tienes algún problema, puedes enviar el archivo a excelsignum@yahoo.es
Saludos.
Un millón de gracias, por la solución me funciona genial
Me alegro Carlos! 🙂 un saludo y gracias por el feecback!
Perdona que te moleste nuevamente y aprovecho estas lineas para felicitarte por el Blog y luego molestarte con un tema que es muy simple pero hasta ahora estoy comenzando a usar VBA y no tengo claro como programarlo.
Tengo una serie de formulas en la primera fila iniciando en B4, C4 y D4 y quiero que me las copie hacia abajo pero solo si la celda de la columna A tiene datos (como ocurre con el doble click) pero la cantidad de filas con datos en A puede variar. (necesito hacerlo en VBA porque es solo una parte de la macro)
Muchas gracias de antemano por tomarte la molestia de ayudarme.
Hola Carlos,
Para que pueda darte una mejor respuesta, necesito que me envíes un archivo de prueba con los datos (puedes inventarlos), es decir un ejemplo con las fórmulas y la estructura de los datos y una breve explicación. Así podré enviarte la mejor alternativa.
Envía la info a excelsignum@yahoo.es
A lo largo de mañana lo reviso.
Saludos y gracias por visitar la web 🙂