No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Ciclos For - Next

14/17
Recursos

Aportes 61

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para el ejercicio se podría convertir el Ciclo For en una función recursiva (función que se llama a sí misma) y luego a través de otro ciclo generar una sumatoria de los primeros N número de Fibonacci. Aquí el ejemplo

Lo comenté para facilitar el entendimiento, pero para este momento con el curso de la profesora Annie seguro que ni necesitaban que lo comente porque son super geniales
.
El código es:

Public Function Fibonacci(x As Integer) As Integer

    'Función recursiva basado en f(x) = f(x-1) + f(x-2)
    'Con valores para detenerse en f(2) = 1 y f(1) = 1, que son los iniciales de Fibonacci

    If x = 2 Or x = 1 Then
        Fibonacci = 1
    Else
        Fibonacci = Fibonacci(x - 1) + Fibonacci(x - 2)
    End If

End Function

Public Sub Suma_Fibonacci()
    
    'Definición de variables, nótese que se pueden definir varias con un mismo tipo
    Dim n, suma_fibo As Integer
    Dim m As String
    
    'Solicitud de dato al usuario y set inicial de la suma en 0
    n = InputBox("Coloca la cantidad de números de Fibonacci que quieres acumular (mayor que 0)", "Acumulador Fibonacci")
    suma_fibo = 0
    
    'Ciclo For
    For i = 1 To n
        suma_fibo = suma_fibo + Fibonacci(Int(i))
    Next
    
    m = MsgBox("El resultado es: " & suma_fibo)
    
End Sub

.
El ciclo For sirve bastante para acumular resultados. Aunque más allá de eso te puede servir para cosas super interesantes como scrapping a las webs. Yo uso los objetos XML.HTTP y HTMLDocument, luego alimento excel con un listado de datos y uso del ciclo FOR para recorrer cada dato y las demás mecánicas extraen la información que necesito de páginas

Utilicé FOR para hacer una macro sencilla en la que al ingresar un número nos devuelve su tabla de multiplicar.

Lo entiendo, el problema será cuando quiera hacer algo solo 😅

Es más complicado utilizar este ciclo que en lenguajes de programación

Hice una subrutina para actualizar los precios de todos mis productos, ingresando la cantidad de productos y el aumento de precios en porcentaje. Para el caso de un 100 (%) me da la siguiente tabla:

Aquí va mi aporte
Muestra reloj y días de la semana

Ejemplo de bucle For Next el cual va contando hacia atrás por el step-1

Utilice ciclo for para obtener valores de la funcion y = x ^ 2

Saludos,

Los ciclos For Next son herramientas clave para automatizar tareas repetitivas. Al emplear una variable contador y una estructura For Next con la sintaxis adecuada, se logra ejecutar un bloque de código en un rango predefinido de veces. Esto simplifica la manipulación de datos, la aplicación de fórmulas y otros cálculos al tiempo que se pueden incorporar condiciones para acciones específicas.

Aquí hay algunas situaciones comunes en las que puedes usar “For Next” en macros de VBA:

Recorrer una serie de elementos: Puedes utilizar “For Next” para iterar sobre una serie de elementos, como una matriz o una colección, y realizar alguna acción en cada elemento.

Generar una secuencia numérica: Si necesitas generar una secuencia de números, puedes usar “For Next” para iterar desde un valor inicial hasta un valor final, incrementando en pasos específicos si es necesario.

Realizar cálculos repetitivos: Si tienes una fórmula o una serie de cálculos que necesitas repetir un número determinado de veces, puedes utilizar “For Next” para realizar los cálculos de forma iterativa.

Este ciclo For... Next se podía emplear por ejemplo para cambiar los valores de una fila o columna, por ejemplo valores positivos y negativos, dejarlos todos como positivos. Este sería un ejemplo.

Muestra los Numeros Primos dando un valor limite, inidcando si es primo y justificando si no lo es.
Sintaxis:
Resultados en Hoja:

Public Sub Potenciador()

Dim y As Integer
Dim z As Integer

z = InputBox("Coloque el valor", "Potenciador")

Cells(1, 1) = z

For y = 2 To z

Cells(y, 1) = (Cells(1, 1) * (y - 1))

Next y

End Sub

For y Next se utilizan para crear un **bucle**, también llamado **ciclo**. Un bucle te permite repetir un bloque de código una cierta cantidad de veces. Imagina que quieres contar del 1 al 10; en lugar de escribir manualmente cada número, puedes usar un bucle For para que lo haga por ti.
La línea `Cells(1, 1) = 1` indica que en la hoja activa de Excel, en la celda ubicada en la fila 1 y columna 1 (es decir, la celda A1), se asignará el valor 1. De manera similar, `Cells(2, 1) = 1` asigna el valor 1 a la celda A2. Estas instrucciones se utilizan para establecer los primeros términos de la sucesión de Fibonacci antes de aplicar el ciclo `For - Next` para calcular los siguientes términos.
En la línea `Cells(i, 1) = Cells(i - 1, 1) + Cells(i - 2, 1)`, `i` actúa como un contador en el ciclo For-Next. Esta expresión está calculando el valor de la sucesión de Fibonacci. 1. `Cells(i - 1, 1)` se refiere al número anterior en la secuencia (Fibonacci(i-1)). 2. `Cells(i - 2, 1)` se refiere al número dos posiciones atrás (Fibonacci(i-2)). 3. La suma de estos dos valores da el siguiente número de la secuencia que se coloca en `Cells(i, 1)`. Es decir, cada número es la suma de los dos anteriores.
Decidí optimizar un poco el código de la maestra, aquí se los comparto: ![](https://static.platzi.com/media/user_upload/image-e017f5f8-66aa-43a5-8e5d-18e0758e37ef.jpg)
![](https://static.platzi.com/media/user_upload/image-4e37ba49-2787-4f06-bb41-ae797874d2e2.jpg)
Me pierdo al momento de elegir la columna para la variable "i" ¿Por qué no coloca "cells(3,1) = i " ?
![](https://static.platzi.com/media/user_upload/image-9557abcc-9205-4e06-9eac-51adee75ee61.jpg)
Public Sub conteo() Dim i As Integer Dim n As Integer n = InputBox("elementos de la sucesión", "conteo") For i = 1 To n Cells(i, 1) = i \* n Next i End Sub

Ejercicio de fibonacci.

mi código de la práctica ```js Public Sub Fibonacci() Dim i As Integer Dim n As Integer n = InputBox("elementos de la sucesion", "Fibonacci") Cells(1, 1) = 1 Cells(2, 1) = 1 For i = 3 To n Cells(i, 1) = Cells(i - 1, 1) + Cells(i - 2, 1) Next i End Sub ```Public Sub Fibonacci() Dim i As Integer Dim n As Integer n = InputBox("elementos de la sucesion", "Fibonacci") Cells(1, 1) = 1 Cells(2, 1) = 1 For i = 3 To n Cells(i, 1) = Cells(i - 1, 1) + Cells(i - 2, 1) Next i End Sub

Utilice el ciclo For para extraer los numeros de una cadena de textos (celda):

Comparto mi ejemplo

Ese ciclo For Next me para ce util para armar una lista que recoja datos por ejemplo usando un inputbox que pregunte datos personales para armar una lista de participantes, apenas una persona responda cada pregunta vuelval el programa a preguntar para que la siguiente persona responda.

Una subrutina para proyectar tu salario mínimo en los próximos n años en función de la tasa de inflación promedio de tu país y tu sueldo actual , para garantizar el mismo poder adquisitivo que tiene ahora.

De esta otra forma imprime la serie, cambiando el ejercicio a mostrar los números de la serie que sean menores a un numero dado por el usuario.

Public Function Fibonachix(s As Integer) As String

Dim i As Integer
Dim j As Integer
Dim a As Integer
Dim b As Integer
Dim x As Integer
j = 0

For i = 1 To s
   a = MsgBox(i, , "División")
   x = i + j
   j = i
   i = x - 1
Next

End Function

Gran explicacion

Hice un contador de numeros de 5 en 5 preguntando el numero de líneas a llenar.

Ejercicio fibonacci:

Buena clase.

Ciclos For-Next podrían ser usados para hacer listas de sucesiones como números de 5 en 5.

¡ Casi que no puedo! jajajajaj

’ Calcula fibonacci
Public Sub fibo()

Dim i As Integer
Dim n As Integer
Dim a

Cells(1, 1) = "Valor de i"
Cells(2, 1) = 1
Cells(3, 1) = 2

Cells(1, 2) = "Valor Fibonacci"
Cells(2, 2) = 1
Cells(3, 2) = 1

n = InputBox(“Coloque los elementos que desea (Serie Finonacci) Min. 3 / Max. 100”)


’ Valída si n es menor 3 (no se hace el calculo y se envia mensaje de error)
'
If n < 3 Then

 a = MsgBox("El numero de elementos mínimo es 3, Ud ingresó " & n)

Else

’ Valída si n es menor o igual a 100

If n <= 100 Then

’ Limpia matriz corrida anterior

For i = 4 To 100

If Cells(i, 1) > "" Then
    Cells(i, 1) = ""
    Cells(i, 2) = ""
Else
    i = 101
End If

Next i
'
' Calculo fibonacci
'
For i = 4 To n + 1

    Cells(i, 1) = i - 1
    Cells(i, 2) = Cells(i - 1, 2) + Cells(i - 2, 2)

Next i

Else
'
' Si n es mayor a 100 envia mensaje de error
'
 a = MsgBox("El numero de elementos maximo es 100, Ud ingresó " & n)

End If

End If

End Sub

Aqui esta mi ejemplo

<Sub EjemploForLoop()
    Sheets("Sheet4").Select
    Dim contadorVar As Integer 'Declara la variable contador
    For contadorVar = 1 To 10 'Inicia el ciclo desde 1 hasta 10
        Range("A" & contadorVar).Value = "ContadorEmpresa" & contadorVar 'Asigna el valor a la celda
    Next contadorVar 'Incrementa el contador en 1
End Sub

> 

Ejercicios de la clase

Creo que es buena práctica tratar de resolver el ejerccio antes que el docente.

Esto fue mi lógica:

Public Sub fibonacci()
    Dim n As Integer
    Dim i As Integer
    Dim j As Integer
    Dim t As Integer
    i = 0
    j = 1
    
    n = InputBox("Ingrese cantidad a mostrar", "Serie Fibonacci")
    Debug.Print i
    Debug.Print j
    
    For n = 3 To n
        t = i + j
        i = j
        j = t
        Debug.Print t
    Next n
    
End Sub

Luego según el desarrolo de la docente, con unos pequeños cambios:

Public Sub fibonacci2()
    Dim n As Integer
    n = InputBox("Ingrese cantidad a mostrar", "Serie Fibonacci")
    Sheets("Hoja2").Select
    Cells(1, 1) = 0
    Cells(2, 1) = 1
    For n = 3 To n
        Cells(n, 1) = Cells(n - 1, 1) + Cells(n - 2, 1)
    Next n
End Sub

Se puede usar for-next para hacer operaciones matematicasque sean secuenciales

'Fibonacci
Public Sub Fibonacci()
    Dim contador As Integer
    Dim numeroElementos As Integer
    
    numeroElementos = InputBox("¿Cuanto elementos de la sucesion quieres?", "Fibonacci")
    
    Cells(1, 1) = 1
    Cells(2, 1) = 1
    
    For contador = 3 To numeroElementos
        Cells(contador, 1) = Cells(contador - 1, 1) + Cells(contador - 2, 1)
    Next contador
    
End Sub

No se que les parezca esta solución integrando todo en un FOR

Algunos escenarios en los que se podría usar:

  • Procesamiento de archivos: Si tienes una carpeta con muchos archivos, podrías usar un ciclo “for…next” para abrirlos uno por uno, procesarlos y guardar los resultados.

  • Generación de gráficos: Podrías usar un ciclo “for…next” para generar gráficos dinámicos a partir de datos en una hoja de cálculo.

  • Validación de datos: Podrías usar un ciclo “for…next” para verificar la integridad de los datos en una hoja de cálculo, como comprobar que todos los campos requeridos estén llenos.

El ejercicio de la clase

Interesante clase. Comparto mi función para crear una lista.

Adjunto mi Aporte Macro para numerar fila dado un valor, utilizando el ciclo For - Next

Fórmula de Clase:

La Subrutina calcula e imprime un número de números pares o impares de acuerdo de lo que indique el usuario.

Si el número de inicio no corresponde al grupo elegido, aumenta su valor en 1.

Por ejemplo: Si queremos los primeros 10 números pares y damos como inicio el número 1, el programa automáticamente parte desde el 2, ya que el número 1 no es par.

Public Sub Pares_impares()

    Dim i As Integer
    Dim n As Integer
    Dim tipo As Integer
    Dim a
    Dim indice
    tipo = InputBox("Indica el tipo de secuencia: 1 para impares o 2 para pares", "¿Par o impar?")
    
    If tipo = 1 Then
    
        i = InputBox("Número de inicio", "Secuencia de pares o impares")
        n = InputBox("Número de elementos", "Secuencia de pares o impares")

        If (i Mod 2 <> 0) Then
            For indice = 1 To n
                Cells(indice, 1) = i
                i = i + 2
            Next indice
        ElseIf (i Mod 2 = 0) Then
            i = i + 1
            For indice = 1 To n
                Cells(indice, 1) = i
                i = i + 2
            Next indice
        End If
        
    ElseIf tipo = 2 Then
    
        i = InputBox("Número de inicio", "Secuencia de pares o impares")
        n = InputBox("Número de elementos", "Secuencia de pares o impares")
        
        If (i Mod 2 = 0) Then
            For indice = 1 To n
                Cells(indice, 1) = i
                i = i + 2
            Next indice
        ElseIf (i Mod 2 <> 0) Then
            i = i + 1
            For indice = 1 To n
                Cells(indice, 1) = i
                i = i + 2
            Next indice
        End If
        
    Else: a = MsgBox("Opción inválida")
    
    End If
End Sub

Estos ciclos son sumamente utiles cuando:
Estamos poniendo un formato en el documento
Vaciamos la información
O necesitamos que las cosas se repitan sin tener que dar la instrucción

Bueno yo hice una sucesión aritmética: se suman los números hasta el valor ingresado.
También hice una sucesión geométrica: se multiplican los números hasta el valor ingresado.

Ejercicio: comprobar los datos en una columna si son positivos, negativos, ceros o no numérico

Public Sub Check_data()
    ' Valida si un dato es positivo, negativo, cero o no numérico
    ' Escribe los posibles valores: Positivo, Negativo, Cero, No numérico en la siguiente columna
    Dim iColumn As Integer ' Número de la columna donde se encuentran los datos
    Dim i As Integer, lastRow As Integer
        
    iColumn = InputBox("Ingrese el número de la columna que contiene los datos", "Columna de datos")
    
    lastRow = ActiveSheet.Cells(Rows.Count, iColumn).End(xlUp).Row ' valor de la última fila con datos
    
    For i = lastRow To 1 Step -1
        idata = Cells(i, iColumn).Value
        
        If Not IsNumeric(idata) Or IsEmpty(idata) Then
            Cells(i, iColumn + 1) = "No numérico"
        ElseIf idata = 0 Then
            Cells(i, iColumn + 1) = "Cero"
        ElseIf idata < 0 Then
            Cells(i, iColumn + 1) = "Negativo"
        ElseIf idata > 0 Then
            Cells(i, iColumn + 1) = "Positivo"
        End If
    Next i
End Sub

Eh realizado dos ejemplos:

  1. uno básico donde me me suma las 10 vueltas

     	Public Sub sum()
     	Dim i As Integer
     	Dim suma As Integer
     		For i = 1 To 10
     			suma = suma + i
     		Next i
     	MsgBox (suma)
     	End Sub
    
  1. Se quiere ver el incremento de 15![orden en hoja de calculo.jpg]pg) despachos de las 10 ordenes en el mismo dia


conocimiento apropiado.

Public Sub Fibonacci()

    Dim i As Integer
    Dim n As Integer
    
    n = InputBox("elementos de la sucesión", "Fibonacci")
    Cells(1, 1) = 1
    Cells(2, 1) = 1
    
    For i = 3 To n
    
        Cells(i, 1) = Cells(i - 1, 1) + Cells(i - 2, 1)
    
    Next i
    

End Sub