Excel Avanzado

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

Excel Avanzado
favicon 1, Ejercicio: Generación de reportes

Ejercicio: Generación de reportes

| 1 comentario

Usted ha sido contratado en la empresa ACME S.A., la cual se dedica a la atención de vehículos de diversas marcas, la empresa se encuentra en un crecimiento considerable, lo cual implica que el número de actividades que posee va en continuo crecimiento, ante ello ha decidido automatizar una de las tareas que tiene a su cargo.

Ha seleccionado un archivo que recibe y atiende todos los días, en donde la información del mismo se debe repartir en varias hojas, de forma que los datos de cada marca debe encontrarse en su propia hoja.
Examinando el caso se le ha ocurrido algunas ideas de cómo resolver el caso empleando macros.

Primera alternativa para la generación de reportes

Comenzar seleccionando todos los datos de la hoja “Atenciones” y copiarlos a todas las demás hojas, confía en que esto lo podría hacer ayudándose con el grabador de macros, siempre teniendo cuidado con el uso de la hoja activa, para que los datos de origen siempre sean los de la hoja “Atenciones”, luego ir a cada hoja y eliminar los datos que no correspondan a la marca de la hoja, ya conoce como eliminar filas en blanco por lo que tendría que hacer algunos cambios sobre dicha rutina para que ahora elimine los datos que no necesita.

Es decir la hoja "Nissan" debe contener únicamente la información de las atenciones a los vehículos "Nissan", la hoja "Toyota" debe tener las atenciones realizadas a los vehículos "Toyota", y lo mismo con la marca "Kia".

Segunda alternativa para la generación de reportes

Su compañero de trabajo le ha indicado que es posible que en el futuro los archivos sean incrementales (en lugar de completos), ellos significa que en el archivo solo recibirá los datos nuevos, y las hojas con las marcas ya tendrán datos que no podrá eliminar, por ello no está seguro de emplear la primera alternativa sino de hacer algo más complejo pero que le servirá a futuro, y no tendrá que hacer cambios posteriores, usted sabe que en este caso podrá usar un FOR en VBA para recorrer todas la filas de hoja “Atenciones”, y que fila por fila las copiará a la hoja que corresponda, puede  usar IF en VBA o Select Case en VBA según sea necesario, y también necesitará el código de la última fila, ya que sabiendo cuál es la última fila la siguiente fila siempre se encontrará en blanco.

Otras Alternativas 

Su docente de Macros en Excel en la clase donde se vieron los temas de "Introducción a las Macros" le contó que existen muchas formas de poder resolver lo mismo, por lo que no ha descartado que puedan existir muchas otras formas de poder resolver el mismo caso.

 

Requisitos adicionales

Finalmente, en la hoja “Pendientes” debe aparecer únicamente los datos de los datos de las atenciones que aún se encuentran pendientes de ser canceladas, esta información será utilizada para que uno de sus compañeros de trabajo se dedique a realizar las llamadas a los deudores.

Quizá algunos artículos como los siguientes puedan ayudarla a tener otra ideas de como resolver el caso:

Copiar Hojas en VBA

Copiar filas filtradas

Copiar hojas a un nuevo libro

 

El archivo para la generación de reportes se encuentra en el siguiente enlace:  Ejercicio – Generación de reportes

Un comentario

  1. Corregido con los pendientes

    Sub ordenarDatos()
    Dim NomHoja As String
    Dim UF, P As Integer

    UF = Worksheets("Atenciones").Cells(Rows.Count, 1).End(xlUp).Row

    For j = 2 To UF

    With Worksheets("Atenciones")
    .Activate
    .Range("A" & j & ":D" & j & ",F" & j).Copy
    End With

    If Worksheets("atenciones").Cells(j, 5).Value = 0 Then

    P = Worksheets("Pendientes").Cells(Rows.Count, 1).End(xlUp).Row + 1
    With Worksheets("Pendientes")
    .Activate
    .Range(Cells(P, 1), Cells(P, 5)).Select
    End With
    ActiveSheet.Paste

    End If

    NomHoja = Worksheets("Atenciones").Cells(j, 1).Value

    UF = Worksheets(NomHoja).Cells(Rows.Count, 1).End(xlUp).Row + 1

    Worksheets(NomHoja).Activate
    Worksheets(NomHoja).Range(Cells(UF, 1), Cells(UF, 6)).Select
    ActiveSheet.Paste

    Next j

    Application.CutCopyMode = False

    With Worksheets("Atenciones")
    .Activate
    .Cells(1, 1).Select
    End With

    End Sub

Deja un comentario

Los campos requeridos estan marcados con *.