Traducir el blog
Cómo calcular números Fibonacci con VBA
Trilogía para calcular la sucesión de Fibonacci
- Cálculo iterativo de Fibonacci
- Cómo calcular números Fibonacci con VBA
- Calculando números grandes Fibonacci. Artículo dividido en 2 fragmentos:
Lo importante para resolver problemas de cálculo es usar los tipos de datos adecuados dentro de un algoritmo, y eso es lo que voy a explicar en este artículo.
Como ejemplo de cálculo vamos a calcular la sucesión de Fibonacci, que es infinita, por lo que el cálculo se ha limitado hasta el elemento o hijo: F(139) con 29 cifras significativas.
Con este cálculo se demostrará que se puede traspasar el límite de 15 cifras significativas de las celdas de Excel, programando macros en lenguaje VBA con números de tipo Decimal.
El resultado del algoritmo de cálculo es el siguiente:
Aclaración: En esta imagen se han agrupado los primeros 140 números de Fibonacci en varias columnas, para que quepan todos en un pantallazo. En la plantilla, que se puede descargar más abajo, los números de Fibonacci se calculan uno en cada fila.
Fíjate en la indicación que hay a partir del elemento F(74), avisando que son números almacenados como textos, por si se desea convertirlos en números.
¡Ni se te ocurra! ¡Pues perderás la precisión de los números!
Límites numéricos
El límite de 15 dígitos significativos para números en celdas existe en todas las versiones de Excel conocidas, como se explica en estas dos páginas:
- Los últimos dígitos se cambian a ceros cuando se escriben números largos en celdas de Excel - Office | Microsoft Docs
- Los números largos se muestran incorrectamente en Excel - Office | Microsoft Docs
Microsoft explica en esos dos artículos cómo guardar números grandes en Excel: ¡como texto dentro de las celdas!
¡Es tan frustrante que ni siquiera se puede guardar el número de una tarjeta de crédito de 16 cifras en una celda! ¡Hay que guardar los 16 dígitos como texto!
Por ejemplo, si queremos guardar el número de nuestra tarjeta de crédito:
- Se debe escribir una comilla simple (') antes del número. Por ejemplo: '1234567812345678
- O dar formato de Texto a la celda:
- En esos dos casos el número se guarda como texto.
- Es adecuado para números de tarjetas de crédito.
- Pero el problema es que es muy difícil, casi imposible, hacer cálculos con números guardados como textos.
- Aunque el aviso de la celda lo sugiera, ¡ni se nos ocurra convertirlo en número!, pues ocurrirá lo que explico a continuación.
- Si escribimos el número sin la comilla simple: 1234567812345678
- Se trata como un número y la última cifra se pone a cero: 1234567812345670
- ¡Lo que no es de desear!
- ¡Ya no es el número de nuestra tarjeta de crédito!
- ¡No se pueden guardar más de 15 cifras significativas de un número!
En el ejemplo de esta captura se introduce el mismo número de 16 cifras (1234567812345678) en las 3 celdas:
- En A1 se introduce el número de 16 cifras como texto. ¡Correcto! ¡Pero no es un número!
- En C1 se convierte automáticamente en un número de coma flotante. ¡Error!
- En E1, con formato numérico tipo 0, se pone a 0 la última cifra. ¡Error!
Este comportamiento se produce solo si la celda tiene el formato Número y el número especificado supera los 15 dígitos. Para las celdas con formato de texto, se pueden escribir hasta 32767 caracteres, aunque Excel solamente muestra los primeros 1024 caracteres en la hoja de cálculo.
O sea, que podemos guardar y visualizar números de hasta 1024 cifras en una celda con formato Texto, lo que es suficiente para el desafío de este artículo: escribir 29 cifras en una celda.
Números de más de 15 cifras
Lo siguiente lo he leído en esta página en inglés: Significant figures - Wikipedia
La mayoría de las calculadoras y programas de computadora pueden manejar el número π como 3,141592653589793 con 16 dígitos decimales, que se usa comúnmente en computadoras, y en la NASA para "los cálculos de mayor precisión del JPL para la navegación interplanetaria".
Pero Excel no llega ni siquiera a guardar números de 16 decimales. Aunque Excel siga la especificación internacional IEEE 754 para almacenar y calcular números de punto flotante, sólo almacena 15 dígitos significativos en un número y cambia los dígitos después del decimoquinto lugar por ceros, por lo que ni la NASA ni SpaceX pueden usar Excel para sus viajes interplanetarios...
¡A no ser que usen el lenguaje VBA para hacer cálculos con más de 15 cifras significativas!
Brian Sutter es el diseñador de la trayectoria de la misión Lucy de la NASA, que explorará los satélites de Júpiter, para la que programa macros en Excel con el tipo Decimal de datos.
¡Y eso es lo que también voy a hacer ahora para calcular los números de Fibonacci!
Calcular Fibonacci con VBA
En estos dos artículos se exponen algoritmos con macros en lenguaje VBA para calcular la sucesión de Fibonacci:
VBA: Números de Fibonacci en Excel | EXCEL FORO: Un blog de Excel
PROGRAMAR EL ALGORITMO DE SUCESIÓN DE FIBONACCI CON VBA EN EXCEL - Excel Signum
El primero está escrito por Ismael Romero, Microsoft MVP Excel desde 2014, que cuenta con uno de los mejores blogs que conozco sobre Excel.
El segundo está escrito por Segundo Miguéns Romeu, Microsoft MVP Office Apps and Services desde 2017, centrado principalmente en Excel, programación y Power Query.
Tengo que reconocer que sus blogs son muy instructivos, ¡pero sus cálculos de la sucesión de Fibonacci con VBA pueden mejorar!
Ismael usa variables del tipo Long en sus cálculos, por lo que el mismo avisa en su artículo que:
"Habrá que tener precaución con el límite de precisión de Excel (15 dígitos), ya que a partir del elemento 75, la precisión de Excel nos devolverá valores incompletos o no válidos."
Segundo usa variables del tipo Variant pero no las inicializa, por lo que un tipo Integer se promociona a un tipo Long y un tipo Long se promociona a un tipo Double, pero no se promociona automáticamente al tipo Decimal, ¡que es el que nos interesa usar para cálculos con números de hasta 29 cifras significativas!
Tipos de datos VBA
El tipo Double tiene como valor máximo: 1,79769313486232E308, pero con 15 dígitos significativos.
El tipo Decimal admite números de hasta: 79228162514264337593543950335 con 29 cifras, pero solo puede usarse como un subtipo de un tipo Variant. No se puede declarar directamente una variable de tipo Decimal. Sin embargo, se puede crear un tipo Variant cuyo subtipo sea del tipo Decimal con la función CDec.
Microsoft hace un resumen de todos los tipos de datos VBA en esta página:
En la siguiente tabla he resumido todos los tipos de datos VBA, por lo que es conveniente colgarla de la cabecera de la cama, para saber programar macros sólidas y robustas:
Contiene enlaces a cada tipo de datos en español, lo que puede hacer que su traducción no sea exacta y se deba: Leer en inglés...
Algoritmo VBA Fibonacci
El algoritmo de la macro SucesiónFibonacci usa la función CDec, que convierte un tipo Variant en un tipo Decimal, para poder calcular el elemento F(139) con 29 cifras significativas:
Lo importante de esta macro es la definición de una variable Array Fib() del tipo Variant que, cuando se definen sus dos primeros elementos, se convierten explícitamente en tipo Decimal con la función CDec:
Fib(0) = CDec(0)
Fib(1) = CDec(1)
Los demás números Fibonacci se calculan mediante suma de los anteriores:
Fib(i) = Fib(i - 1) + Fib(i - 2)
La suma de números de tipo Decimal convierte implícitamente el resultado en tipo Decimal.
Los números de más de 15 cifras se guardan en las celdas convertidos a texto con la función:
CStr(Fib(i))
Esta es la hoja de cálculo 'VBA Fibonacci', vacía antes de hacer el cálculo:
En la celda E1 se escribe el valor máximo de X que se quiere calcular, que no puede ser mayor que 150, aunque sólo calcula hasta Fib(139) pues el tipo Decimal llega hasta 29 cifras significativas.
Haciendo clic en la espiral de Fibonacci comienza el cálculo.
Haciendo clic en la papelera se borra la tabla de números Fibonacci.
Haciendo clic en mi foto se abre la página de mi blog.
En la hoja 'VBA Fib Simple' también se calcula la sucesión de Fibonacci, pero con un algoritmo mucho más simple e igual de efectivo, que conviene que estudies...
Descarga del algoritmo
El archivo de ejemplo, con la primera hoja protegida sin contraseña, se puede descargar desde cualquiera de estos enlaces:
- Microsoft OneDrive: Cálculo VBA Fibonacci - PW1.xlsm
- Sites Google Drive: Cálculo VBA Fibonacci - PW1.xlsm
Abre el archivo y habilita la edición y las macros para poder hacer los cálculos.
Vídeo: Cómo calcular números Fibonacci con VBA
En este vídeo explico como programar macros VBA con las que calcular números de hasta 29 cifras significativas:
Otros algoritmos de cálculo
Mientras me documentaba descubrí que se me había adelantado Benjamín Martín-Palanco con estos algoritmos:
Ahora falta conseguir mas de 139 elementos Fibonacci, con Excel y VBA, como se hace con R, que lo consigue gracias a la clase bigz: Large Sized Integer Values.
¿Cómo conseguir F(140) y sucesivos números de Fibonacci en VBA de Excel?
La respuesta a esta pregunta la dejo para otro artículo.
Mi lista de blogs
-
Nueva Función TRIMRANGE y Nuevo Operador de Rango - Hoy vengo con novedades emocionantes en Excel: Microsoft ha liberado una nueva función llamada TRIMRANGE y ha introducido un nuevo […] The post Nueva Fun...Hace 1 día
-
Divisor propio mayor que la raíz cuadrada - Explorando por OEIS, encontré un tipo de números en https://oeis.org/A332269 y me ha apetecido desarrollar el tema mediante nuestras funciones en hoja ...Hace 1 día
-
PASAR DATOS A FILAS SEGÚN ELEMENTOS ENTRE GUIONES UTILIZANDO POWER QUERY - Hola a todos! Después del post anterior (aquí) en el que realizábamos una tarea utilizando VBA, me gustaría replicar el mismo trabajo pero usando Power …...Hace 3 días
-
3DFrame-py; with non-linear analysis - Exactly a year since the previous update I have revised the 3DFrame-py spreadsheet with the addition of non-linear analysis options. The new files can be d...Hace 4 días
-
Tiempo pasado, presente y futuro - 🔝*To translate this blog post to your language, select it in the top left Google box. * AVISOS que salvan vidas Haciendo caso de las posibles inund...Hace 5 días
-
Color, Conditions, and Copilot: How to save time using conditional formatting with Copilot in Excel - Hi everyone, this is part 11 in a series of posts to show you some of the things that are possible to do with Copilot in Excel. *What is conditional f...Hace 6 días
-
5 Ways to Calculate Hours Worked in Microsoft Excel - Wondering how to calculate hours worked in Excel? You’ve reached the best resource to learn from. So, tag along! Calculating time values in Microsoft Excel...Hace 1 semana
-
Insertar un objeto vinculado en Excel es fácil y práctico - Aprende a insertar un objeto en Excel. Ya puedes traer objeto vinculado en Excel de manera más avanzada que con los comandos Copiar y Pegar te permiten t...Hace 1 semana
-
Debra’s Excel News–October 2024 - New PIVOTBY function, get ready for Spreadsheet Day, and more, in this month’s Excel news. Visit my Excel website for more tips, tutorials and videos, and ...Hace 4 semanas
-
4 ejemplos de utilización de validación de datos con fórmulas - Ya sabes que la herramienta de Validación de datos es de gran utilidad para controlar y restringir la introducción de datos y así, asegurarte de…Hace 1 mes
-
Trucos de Excel: Referencias Relativas, Absolutas y Mixtas Explicadas ✨ [VIDEO] - ¡Hola a todos! Hoy hablaremos sobre un tema muy importante para quienes usan Excel: los tipos de referencia. Las referencias son fundamentales al momento d...Hace 1 mes
-
How To Predict Bearing Life With Excel - When you work in mechanical engineering, understanding the reliability and performance of bearings under various conditions is crucial. Bearings are the co...Hace 2 meses
-
How to calculate WEEKNUMBER in Month / Quarter / Year with Excel? - Let's say you have daily data and your boss wants to see the trends by week in month or week in quarter? How do you calculate the week number in a month ...Hace 2 meses
-
Excel: Cálculo de Finiquito, Beneficios Sociales Bolivia - Es importante tener nociones mínimas acerca el cálculo del finiquito y Beneficios Sociales de un trabajador en Bolivia, ya sea para la verificación de nues...Hace 2 meses
-
-
Minutos de juego y puntos. El Espanyol, sus finales de partido y mis enfados - Pienso que el Espanyol este 2024 se está dejando muchos puntos al final de los partidos. Cuando el ... Leer más » The post Minutos de juego y puntos. El ...Hace 7 meses
-
TikTok’s search evolution - 2 in 5 Americans use TikTok as a search engine. Nearly 1 in 10 Gen Zers are more likely to rely on TikTok than Google as a search engine. More than half of...Hace 7 meses
-
MASTERCLASS Gratis – Gráfica de Gestión Proyectos en #EXCEL. - Aprende a crear un Gráfico de CURVA S, ideal para GESTIÓN DE PROYECTOS, porque te permite identificar como esta tu proyecto tanto en COSTOS como en TIEMP...Hace 8 meses
-
Interés compuesto con Excel - Este es un mapa mental de las distintas funciones Excel para calcular el valor del dinero en el tiempo aplicando la ley de capitalización compuesta. En ...Hace 9 meses
-
Demos cursos de Excel 2007, 2010, 2013, 2016, 365 - Puedes consultar las demostraciones de los siguientes capítulos de los cursos Excel. Demo cursos ExcelHace 9 meses
-
Unblocking and Enabling Macros - When Windows detects that a file has come from a computer other than the one you're using, it marks the file as coming from the web, and blocks the file....Hace 1 año
-
-
Navigating Outlook Favorites - I have these four favorites defined in Outlook: From the inbox, I could hit Shift+F6 to get into the Favorites area but sometimes I would end up in no man’...Hace 1 año
-
Office Scripts: Trabajando con Tablas - [image: Office Scripts: Trabajando con Tablas] Me he dado cuenta que últimamente solo escribo de lenguaje M (es mi pequeño vicio)... pero hay que liberar l...Hace 1 año
-
Progress on the Block Protocol - Since the 1990s, the web has been a publishing place for human-readable documents. Documents published on the web are in HTML. HTML has a little bit of… Re...Hace 1 año
-
Hello world! - [image: Hello world!] Welcome to WordPress. This is your first post. Edit or delete it, then start writing!Hace 2 años
-
Decálogo para realizar Trabajos de Fin de Grado (TFGs) y de Fin de Máster (TFMs) - 1.- Tanto TFGs como TFMs son un requisito para graduarse a la vez que una oportunidad para aprender. Así, el tiempo que se le dedica es muy variable. De...Hace 3 años
-
London Excel Meetup Workbooks - The workbooks used in my presentation on “Analytical and Interactive Dashboards in Excel” at the London Excel Meetup, September 3, 2020Hace 4 años
-
Cálculo de jornada que termina al día siguiente (Power Query) y despedida - [image: Cálculo de jornada que termina al día siguiente (Power Query) y despedida] Este blog se ha ocupado de cálculos de tiempo con bastante intensidad, c...Hace 4 años
-
Visualize parts and whole - combine clustered column and stacked column charts - *Inga: Disa what?* *Igor: -ppeared.* by The FrankensTeam ------------------------------ Really it was 3 years ago we posted our last article? *Freddy: Th...Hace 5 años
-
-
-
-
-
-
-
-
-
No Response to "Cómo calcular números Fibonacci con VBA"
Leave A Reply
Indícame las erratas que encuentres y qué es lo que te gustaría ver en los próximos artículos.