Macro insertar columna después de una condición (mes y año) al cambio de una celda (mes y año)

Un gusto conocer la página.

Para - Puro Amor.

Necesito una super ayuda trabajar manualmente esta información me toma un poco de tiempo.

Tengo un archivo con información que va acumulándose mes por mes al final unos totales y luego de unas columnas la misma información mes por mes pero en porcentajes. Necesito que con cada cambio de una celda que especifica el mes a trabajar se copie la columna del mes anterior y se inserte después de este y haga lo mismo para los porcentajes que tiene como titulo también el mes y se repita en todas las hojas.

Claro en cada hoja no esta en la misma intentar ni son las mismas columnas, por eso necesito que tome como condición el mes anterior.

Quería subir el archivo pero no se como disculpen.

Detallo un poco digamos que en la celda c3 pongo el mes a trabajar abr-17 y en la columna a4 los conceptos y en la fila 5 los títulos y los meses puede ser desde ene-12 a la fecha después de unas dos columnas nuevamente empiezas los meses desde ene-12 pero se muestran los valores en porcentajes.

Esta misma información la tengo en varias hojas por categorías diferente y por conceptos diferentes pero siempre por meses. Luego en otras hojas las mismas cabeceras pero acumulado la suma de las hojas anteriores.

1 respuesta

Respuesta
1

Supongo que yo soy "Puro Amor", jeje

Envíame 2 archivos, en el primer archivo me pones los datos antes de hacer los cambios, en el segundo archivo muestras cómo quieres el resultado, en este segundo archivo, me explicas con colores y con comentarios qué hiciste.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Wendy Janeth Izarnótegui Rivera” y el título de esta pregunta.

¡Gracias!

Genial ya lo envío

Te anexo la macro para insertar una columna

Sub Insertar_Mes()
'Por.Dante Amor
    fec = ActiveSheet.Range("A4")
    For Each h In Sheets
        Set r = h.Range(h.Cells(1, 2), h.Cells(10, Columns.Count))
        Set b = r.Find(fec, LookAt:=xlWhole)
        If Not b Is Nothing Then
            MsgBox "La fecha ya existe en la celda : " & b.Address(False, False), vbExclamation
            Exit Sub
        End If
        '
        cini = 2
        For i = 1 To 2
            Set r = h.Range(h.Cells(1, cini), h.Cells(10, Columns.Count))
            Set b = r.Find("TOTAL", LookAt:=xlWhole)
            If Not b Is Nothing Then
                col = b.Column
                fil = b.Row
                h.Columns(col).Insert
                h.Cells(fil, col) = fec
                cini = col + 2
            End If
        Next
    Next
    MsgBox "Fin"
End Sub

.

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

.

Avísame cualquier duda.

.

Super Dante, muchas gracias por la respuesta... :)

Ayúdame como puedo adicionar o cambiar para que en vez de solo insertar la columna con datos en blanco, me copie la columna del mes anterior y la inserte con la misma condición.

Esto pasa ya que en algunas hojas no son datos sino formulas.

Te anexo el cambio

Sub Insertar_Mes()
'Por.Dante Amor
    fec = ActiveSheet.Range("A4")
    For Each h In Sheets
        Set r = h.Range(h.Cells(1, 2), h.Cells(10, Columns.Count))
        Set b = r.Find(fec, LookAt:=xlWhole)
        If Not b Is Nothing Then
            MsgBox "La fecha ya existe en la celda : " & b.Address(False, False), vbExclamation
            Exit Sub
        End If
        '
        cini = 2
        For i = 1 To 2
            Set r = h.Range(h.Cells(1, cini), h.Cells(10, Columns.Count))
            Set b = r.Find("TOTAL", LookAt:=xlWhole)
            If Not b Is Nothing Then
                col = b.Column
                fil = b.Row
                h.Columns(col).Insert
                h.Cells(fil, col) = fec
                For j = 1 To h.Cells(Rows.Count, col - 1).End(xlUp).Row
                    If h.Cells(j, col - 1).HasFormula Then
                        h.Cells(j, col - 1).Copy h.Cells(j, col)
                    End If
                Next
                cini = col + 2
            End If
        Next
    Next
    MsgBox "Fin"
End Sub

R ecuerda cambiar la valoración a la respuesta.

Genial muchas gracias por la ayuda.

Estoy cambiando algunos detalle y revisar si mejora los tiempos. Cambie esta parte

 h.Columns(col).Insert

Por:

h.Columns(col - 1).Copy
h.Columns(col).Insert

Y me trabaja más rápido, que te parece.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas