Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Logo Excel Avanzado

5 ejemplos de uso de Loop

| 10 comentarios

Macro “DO… Loop”

Ejemplo de loop

La macro Do… Loop nos ayuda  cuando necesitamos repetir una operación de la cual no sabemos el número de veces que debe repetirse, pero si tenemos idea de que condición se deba cumplir para que se realice. En esta parte se realizar 5 ejemplos de esta macro:

Ejemplo 1: Escribir una palabra un número limitado de veces.

Este ejemplo es sencillo, pero ayudara mucho a brindar una intuición de esta macro. Supongamos que solo queremos escribir la palabra “Excel” 7 veces. Entonces para hacerlo podemos usar la siguiente instrucción:

Sub Ejemplo1()

Dim Escribir As Integer

Escribir = 1

Do While Escribir < 7

    ActiveCell.FormulaR1C1 = "Excel"

    lastrow = Cells(Rows.Count, 1).End(xlUp).Row

    Cells(lastrow, 1).Offset(1, 0).Select

    Escribir = Escribir + 1

    Loop

End Sub

En la primera y segunda línea de esta  macro se define una variable llamada Escribir como entero y la cual tomara el valor de “1”. A partir de la tercera línea se comienza a usar la macro con la código “Do While” (Hacer mientras) la cual dice que mientras la variable escribir tome un número menor a 7 se escribirá en la hoja activa la palabra “Excel” (4ta línea). Luego la 5ta y 6ta línea es la programación para la “última fila en blanco”.

La 7ma fila se usa para poner un fin al bucle. En esta se  ordena a Excel que, al momento de pasar la siguiente fila, la variable “Escribir” tome el valor anterior (que era uno) y que le sume uno. De esta manera, la variable llegara a tomar el valor de 6 y el bucle finalizara.

Por último, se escribe en la 8va fila el cierre de la macro: “Loop”. Este ejemplo se puede ver en la hoja1 del Excel que esta adjunto a este texto en la cual se  colocara un Botón1 llamado “Escribir Excel” la cual al ponerle clic se ejecutara la macro.

Utilidad: Supongamos que necesitamos escribir una misma palabra en una misma columna la cual debe quedar siempre constante. Entonces con esta macro se puede realizar el trabajo de forma sencilla.

Ejemplo 2: Asignar numero aleatorios

Muchas  veces en Economía se necesita simular modelos económicos para los cuales se necesitan datos no conocidos de las ecuaciones. En este caso se necesitan simular números aleatorios para poder dar forma a estos modelos. Este es un caso sencillo de lo que se realizara en este ejemplo.

Entonces se podría asignar número aleatorio a una hoja de Excel usando la siguiente programación:

Sub ejemplo2()

    Dim variableX As Double

    Dim variableY As Double

    Dim fila As Double

        variableX = 0

        fila = 2

    Do While variableX < 100

        variableY = Int(Rnd * 10) + 1

        variableX = variableX + variableY

        Cells(fila, 3) = variableY

        Cells(fila, 4) = variableX

        fila = fila + 1

    Loop

End Sub

Esta macro define 2 variables en sus primeras líneas, las cuales se llamaran “VariableX” y “VariableY”. En la siguiente línea se define otra variable llamada “fila” que será de utilidad para poder hacer correr el bucle. En la 4ta y 5ta línea se les asigna a la “variableY” el valor de cero y la variable “fila” el valor de 2. Luego se pide usar el comando “Do While” (hacer hasta) diciendo a Excel que, mientras la “variableX” tome un valor de 100 entonces la “variableY” sea igual a un valor aleatorio multiplicado por 10 y se le sume 1 (fila7). Luego la “variableX” se le pide tomar su mismo valor asignado anteriormente (cero) pero que se le sume uno a mediada que el bucle se ejecuta (fila 8 de la macro).

Las filas 9 y 10 de la macro ordena que la celda (fila=2, 3) tomen el valor asignado a la “variableY” y la celda (fila=2, 4) tome el valor de asignado a la “variableX”, respectivamente. La fila 11 de la macro ordena que la variable “fila” se le sume un valor de uno a su valor original (que era 2) para que el bucle pueda correr.

Finalmente se usa “Loop” para cerrar la macro. La solución de esta macro se encuentra en la “hoja 2” del Excel adjunto al texto.

Utilidad: Esta macro puede servir para poder asignar valores a parámetros de un modelo matemático.

Ejemplo 3: Para evaluar la aprobación de un crédito.

Supongamos que trabajamos en un banco y necesitamos saber información de la agente para poder decidir si le asignamos o no un crédito. Con esta macro podemos simplificar el trabajo de una manera más eficiente.

Para realizar la macro se utilizara el siguiente comando:

Sub ejemplo3 ()

ult = Cells(Rows.Count, 2).End(xlUp).Row         

fila = 2

Do Until fila = ult + 1

    If Cells(fila, 3) = "Sí" And Cells(fila, 4) > 1000 And Cells(fila, 5) < 75 And Cells(fila, 6) = "Sí" Then

    Cells(fila, 7) = "Crédito aprobado"

    Else

    Cells(fila, 7) = "Crédito no aprobado"

    End If

    fila = fila + 1

Loop

End Sub

El primer código nos permite conocer a la persona que solicita el préstamo y luego pasar a la siguiente (este es el comando de la última fila).  Luego en la segunda línea se asigna una variable, la cual tomara el valor de 2. La tercera línea de la macro se comienza con la programación de la macro “Do” y en la cual se pide que la variable “fila” tome el valor de la variable “ult” y se le sume uno.

Las filas del 3 al 7 de la macro se colocan los estándares a evaluar por el banco y las respuesta que se les deben dar a los solicitantes y dice: si (if) en la celda (fila=2, 3) toma el valor de “Sí” “y “(And) en la celda (fila=2, 4) toma un número mayor a 1000 “y” en la  (fila=2, 5) toma un valor menor a 75 “y” en la celda (fila=2, 6) se coloca “Sí”; “entonces” (then)  en la celda (fila=2, 7) se escribirá “crédito aprobado”, de lo contario en la misma celda se le negara y se escribirá “Crédito no aprobado”.

El ejemplo de esta macro se encuentra en la hoja 3 del “Excel” adjunto al texto.

Utilidad: Cuando una persona trabaja en un banco o en alguna otra institución donde se requiera estándares para poder dar luz verde a un desembolso de dinero u otra operación se puede usar esta macro para poder evaluar a los solicitantes.

Ejemplo 4: Loop para detallar condición de un pasajero

Cuando una empresa necesita conocer algunas caracterizas o tener estadísticas de un sus clientes este Loop es muy útil.

Para realizarlo usemos el siguiente comando:

Sub ejemplo4()

fila = 2

    Do While Cells(fila, 1) <> ""

    If (Cells(fila, 2) >= 18 And Cells(fila, 3) = "M") Then

    Cells(fila, 4) = "mayor de edad hombre"

End If

    If (Cells(fila, 2) >= 18 And Cells(fila, 3) = "F") Then

    Cells(fila, 4) = "mayor de edad mujer"

End If

    If (Cells(fila, 2) < 18 And Cells(fila, 3) = "M") Then

    Cells(fila, 4) = "menor de edad niño"

End If

    If (Cells(fila, 2) < 18 And Cells(fila, 3) = "F") Then

    Cells(fila, 4) = "menor de edad niña"

End If

    fila = fila + 1

Loop

End Sub

Como siempre, se comienza especificando la variable “fila” que toma el valor de 2. Luego se comienza con la Macro “Do” y se ponen los estándares que se deben tomar. Se usa la Macro “If” la cual dice que si en la celda (fila=2, 2) se pone un número mayor o igual a 18  “y” en la celda (fila=2, 3) se coloca “F” entonces se escriba “mayor de edad mujer” en la celda (fila=2, 4).

Se vuelve a usar la macro “if” donde se ponen las otras alternativas posibles para reconocer si la persona  es menor de edad, es hombre o mujer o es niño o niña. La lógica des esta es la misma.

Finalmente se cierra la macro con Loop. El ejemplo de esta macro se encuentra en la hoja 4 del Excel adjunto al texto.

Utilidad: Cuando una empresa requiere recolectar estadística de sus clientes de manera ordenada y más sencilla.

Ejemplo5: Loop para solicitar datos.

Supongamos que trabajamos en una oficina donde se requiere llenar datos sobre clientes, futuros clientes, solicitantes a trabajos, etc. Entonces uno podría necesitar una herramienta para poder llenar los datos de manera sencilla y ordenada y de acuerdo a la información que la computadora indique. Para este caso podemos usar un Loop para solicitar y registrar los datos de las personas.

Esta macro tiene la siguiente forma:

Sub ejemplo5()

Dim Registrar As Integer

Registrar = 1

    Do While Registrar = 1

    lastrow = Cells(Rows.Count, 1).End(xlUp).Row

    Cells(lastrow, 1).Offset(1, 0).Select

    fila = ActiveCell.Row

                carrera = InputBox("¿Que carrera profesional tiene?: ")

                pais = InputBox("Ingrese el pais de origen de " & nombre)

                ciudad = InputBox("Ingrese la ciudad de preocedencia de " & nombre)

    Cells(fila, 1) = carrera

    Cells(fila, 2) = pais

    Cells(fila, 3) = ciudad

    mensaje = "Desea ingresar a otra persona?"

    estilo = vbYesNo + vbQuestion + vbDefaultButton2

    respuesta = MsgBox(mensaje, estilo)

    If respuesta = vbYes Then

        Registrar = 1

    Else

        Registrar = 0

    End If

    Loop

End Sub

Se comienza definiendo una variable “Registrar” la cual tomara el valor de 1. Luego comenzamos a llenar el comando de la macro la cual indica que se realice mientras la variable registrar tome el valor de 1. Las filas 4 y 5 de la macro es la programación de la “última fila en blanco”. Luego, las siguientes líneas piden que se realice una fila la cual tome el valor de la celda activa. Posteriormente, se requiere que existan 3 variables las cuales al ejecutarse aparezca un mensaje para ser llenado con la información  pertinente de algún individuo y donde se puedan registrar información personal.

Las líneas 10 al 12 asignaran a las celdas (fila, 1), (fila, 2), (fila, 3)  la información que se recogió anteriormente para que aparezca en la hoja Excel. Por último, en las líneas 13 a la 19 se escribe un comando en la cual Excel pregunte si se requiere seguir con el registro de la información. Si se coloca “Si” se pasara a registrar a una persona más, de lo contrario acabara el bucle.

El ejemplo de esta macro se encuentra en la hoja 5 del Excel adjunto a este texto.

Utilidad: Esta macro es útil cuando una empresa necesite registrar datos  de clientes o diferentes individuos de acuerdo a la utilidad que requieran. Esta forma, es una manera eficiente y sencilla de recolectar información.

Por: Kevin Josmar

10 comentarios

  1. Excelente el ejemplo y la explicación brindada. Clara y simple, además nos ofrece la posibilidad de adaptación a nuestras necesidades según el ámbito en que nos estamos desempeñando. Gracias

  2. Excelente ejemplo! Una pregunta como haría en el caso que solo permita ingresar datos desde un Userform a una hoja de excel hasta 5 veces y luego indique que se han insertado el máximo de datos?

  3. En el ejemplo 1 debe decir "Supongamos que sólo queremos escribir la palabra Excel 6 veces", ya que si ejecutamos la macro sólo escribirá en 6 celdas diferentes comenzando en la celda activa.

    Tener en cuenta además, que la primera palabra la escribirá en la celda activa (en la columna donde esté la celda activa); las demás, las escribirá en la columna "A".

  4. En el caso que quisiera generar un macro con lo siguiente x= "numeros N a ingresar" y Y="Suma de esos N numeros"
    Como se cuando se le asigna el valor 0 a una variable o 2 como en el ejemplo de las filas, y en la condicion Do while que deberia poner si nose cuantos valores se ingresaran, o en otras palabras, la condicion Do while para un numero cualquiera de valores a ingresar.

  5. buenos dias amigo, tengo una macro, corta pero compleja que quisiera que me explicaras la funcion de cada linea de programacion como haces con tus macros, de verdad apreciaria tu ayuda..

    la funcion de esta programacion es hacer una consulta desde una pagina web sobre el numero de identificacion fiscal de personas o empresas, todo funciona como una funcion 'consultar_rif' aki te dejare la programacion;

    Public Function CONSULTA_RIF(ByVal rif As String)

    'Declaramos variables
    Dim Respuesta As String
    Dim ie As Object

    'Creamos aplicación (internet explorer)
    Set ie = CreateObject("InternetExplorer.Application")
    ie.navigate ("http://www.google.com/?") & "rif=" & rif

    Do Until ie.ReadyState = 4
    DoEvents
    Loop

    If Mid(rif, 1, 1) = "J" Then
    J = 3
    End If
    If Mid(rif, 1, 1) = "V" Then
    J = 5
    End If

    Respuesta = ie.Document.getElementsByClassName("listRIF").Item(0).getElementsByTagName("td").Item(J).innerText
    CONSULTA_RIF = Respuesta
    ie.Quit
    End Function

  6. necesito el commando para leer una lista externa creada en hoja de texto y mostrarla en la hoja de calculo.
    Gracias de antemano.

  7. Excelente aporte. Muy agradecido. Les felicito.

  8. Buenos dias,
    Como puedo armar un macro donde me permita controlar hora de salida y entrada de los trabajadores, ingresa su DNI a traves de texbox, al hacer clik muestre sus datos y en msgbox, u otra forma informe, si por decir llego tarde, cuando el trabajador llega tarde. por decir entrada 08.00 a .m. llego 8.10, tolerancia 10 minutos, y que informe a traves de msgbox que esta llegando tarde y que se almene en hoja excel la hora de llegada.
    Es posible disculpe mi ignorancia

  9. Por favor ayúdeme con la síntaxys para un Do loop cuando el número de repeticiones está en función de una celda cuyo valor disminuye en cada repetición. El loop debería finalizar cuando el valor de esa celda es 0 (cero)

  10. EL EJEMPLO 1 ; YO LO REALICE DE LA SIGUIENTE MANERA; SIN COMPLICARME TANTO:
    Option Explicit

    Sub Ejemplo1()

    Dim Escribir As Integer

    Range("A8").Select
    Escribir = 1

    Do While Escribir < 7

    ActiveCell.Offset(0, 0) = "MERCEDES DEL CARMEN PEREYRA CEDRON"

    Escribir = Escribir + 1
    ActiveCell.Offset(1, 0).Select

    Loop

    End Sub
    Publicado, el domingo 25 de diciembre del 2022
    01:21 de la madrugada

Deja una respuesta

Los campos requeridos estan marcados con *.