Como organizar un informe de excel con macro?

Para Dante Amor

Hola Ingeniero Dante Amor

Nuevamente recurro a su valiosa ayuda

Un software administrativo me genera un informe en Excel, el cual debo adaptarlo para su análisis y generar otro reporte. Como son procedimientos repetitivos y de gran volumen de registros quiero que a través de una macro me los siguientes procedimientos de manera que quede un informe tabular.

El informe en la columna “A” coloca los datos por niveles o categorías en formato texto, ejemplo:

1 Activo (Categoría principal) Este nivel totaliza la sumatoria de los grupos (11 + 12 + 13 ….)

11 Disponible (Categoría grupo) Este nivel totaliza la sumatoria de las cuentas (1105 + 1305….)

1105 Caja (Categoría cuenta control) Este nivel totaliza la sumatoria de las subcuentas (110505 + 110510 …)

110505 Caja general (Categoría subcuenta) Este nivel totaliza la sumatoria de los auxiliares que la componen (110505.01 + 110505.02 ….) Según sea el caso.

110505.01 Caja general pablo (Categoría subauxiliar) a este nivel se registran las operaciones y puede estar marcada que se maneja con terceros (las personas naturales o empresas que intervienen el registro) ejemplo:

110505.01 Caja general pablo 15,000

123 Pedro Pérez 5,000

125 Juan Gómez 5,000

145 María López 5,000

Esta categoría es la etiqueta para el informe.

No siempre el último nivel discrimina el contenido de los terceros ya que cuando fue creada la categoría no se le indico que manejara terceros.

110505.02 ….

1100510 …

1305 Deudores ….

Lo requerido por la macro:

  1. Que inserte una columna inicial (A) y luego rellene una serie en columna con incremento en +1 para que quede un índice consecutivo de registros.
  2. Luego que inserte una columna y copie el contenido de la columna (B) en la columna (C)
  3. En la columna (B) debe quedar solo la última categoría, es decir a nivel de subauxiliar. Se debe borrar todos los datos que no sean etiqueta (subauxiliar)
  4. Luego se rellena con celda en blanco la columna (B) con los códigos de los subauxiliares, es decir con la etiqueta
  5. Luego se elimina las filas que donde la columna B y C sean iguales
  6. Luego que organice la columna (I) de menor a mayor
  7. Luego que sume de la columna (i) un rango determinado, es decir que sume los valores <= "X" donde que X es un valor definido o prestablecido (ejemplo 1000)
  8. Luego que inserte una fila debajo de cada etiqueta para colocar el resultado de la sumatoria anterior y en la columna B y C de la misma fila la nombre con un código y nombre dado
  9. Por ultimo que elimine el rango sumado en el punto 7 y solo deje la fila donde quedo el resultado.

Al correo le envío el archivo para mejor comprensión.

1 respuesta

Respuesta
1

Envíame un nuevo archivo y me explicas cómo pasas de la hoja "PASO1" a la hoja "PASO2"

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Francisco Jaimes” y el título de esta pregunta.

Listo ya envié lo solicitado gracias

Buen día ingeniero Dante Amor

Esta mañana pensando en la pregunta solicitada, se me ocurrió la siguiente idea:

La hoja PUC del archivo en la columna C indica que cuentas manejan terceros y que cuentas no, como la característica mayor que se repite es que la "N" , para el paso 2 del ejemplo del archivo se podría programar una condicional que le indique al informe que las cuentas que digan "N" las elimine del reporte y solo quedaría la cuenta auxiliar "130505.01" y debajo de esta los terceros.

Luego se programaría que si la columna "B" y "C" son iguales se eliminen

para que quedara el reporte de la siguiente manera

ANTES

130505.01       130505.01

130505.01        123

DESPUÉS

130505.01          1234            

Debes estar seguro si la característica se repite en todas, no en la mayoría, ya que con una sola excepción la macro no funcionaría, por eso te envíe 2 propuestas viables.

Si señor, la hoja que estarían las cuentas indica la característica si maneja tercero o no, la marca con una ES si maneja y con una N si no maneja. Es compatible con la 2 propuesta que me planteo.

Te anexo la macro

Sub Final()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("ORIGINAL")
    Set h2 = Sheets("FINAL")
    Set h3 = Sheets("PUC")
    '
    h2.Rows("8:" & Rows.Count).ClearContents
    'j = 8
    For i = 8 To h1.Range("A" & Rows.Count).End(xlUp).Row
        cuenta = h1.Cells(i, "A")
        If InStr(1, cuenta, ".") Then puc = cuenta
        Set b = h3.Columns("A").Find(cuenta, lookat:=xlWhole)
        If b Is Nothing Then
            'es tercero
            Set b = h2.Columns("A").Find(puc, lookat:=xlWhole)
            If b Is Nothing Then
                'no existe lo agrega
                u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
                h2.Cells(u2, "A") = puc
                If h1.Cells(i, "G") <= 150 Then
                    h2.Cells(u2, "C") = "CUANTIAS MENORES"
                    h2.Cells(u2, "H") = h1.Cells(i, "G")
                Else
                    h1.Range("A" & i & ":" & "H" & i).Copy
                    h2.Range("B" & u2).PasteSpecial xlValues
                End If
            Else
                'si existe
                u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
                If h1.Cells(i, "G") <= 150 Then
                    existe = False
                    For k = b.Row To u2
                        If h2.Cells(k, "C") = "CUANTIAS MENORES" Then
                            existe = True
                            fila = k
                            Exit For
                        End If
                    Next
                    If existe Then
                        h2.Cells(fila, "H") = h2.Cells(b.Row, "H") + h1.Cells(i, "G")
                    Else
                        h2.Cells(u2, "A") = puc
                        h2.Cells(u2, "C") = "CUANTIAS MENORES"
                        h2.Cells(u2, "H") = h1.Cells(i, "G")
                    End If
                Else
                    h2.Cells(u2, "A") = puc
                    h1.Range("A" & i & ":" & "H" & i).Copy
                    h2.Range("B" & u2).PasteSpecial xlValues
                End If
            End If
        End If
    Next
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas