Aplicar Macro al insertar nuevas Columnas

Dame una mano. Falta muy poco para terminar y estoy haciendo otras macros. Gracias

Tengo una columna donde tengo que calcular la diferencia entre otras dos columnas automáticamente. El detalle esta en que estas columnas varían de acuerdo al mes. Es decir el usuario agrega más columnas y la fórmula tiene que cambiar a través de un botón-. Aquí un ejemplo:

VAR MES, debe calcular la diferencia entre una columna anterior del VAR SEM y el ultimo Cierre encontrado en este caso ABRIl.

Cuando la columna anterior de VAR SEM sea Cierre. Entonces sería la diferencia del Cierre de mayo - el Cierre de abril. Osea la fórmula no cambia. Simplemente se esta cogiendo la columna anterior de VAR SEM y el cierre anterior. (Estoy aclarando la idea)

Pero, Si antes de la columna VARSEM hay una columna semanal ejemplo 05/06 y ya tenemos el cierre de mayo entonces. La fórmula cambia.

Seria la columna 05/06 menos el cierre de mayo.

Es decir que el código debe encontrar cada vez que haya un nuevo cierre para actualizar la fórmula.

Yo pienso que debería poner en variables los nombres de las columnas futuras o cierres del mes que siempre tendrán el siguiente formato:

Cierre Abr15, Cierre may15, Cierre jun15, ..., Cierre dic15.

Ponerles un valor por ejemplo del 1 al 12 y preguntar cual es el mayor.

1 respuesta

Respuesta
1

Envíame tu archivo para revisar la fórmula. Recuerda poner tu nombre en el asunto del correo.

No me queda claro en qué casos se tiene que poner "S.D.", supongo que hay que hacer algunos ajustes a la macro.

Por lo pronto ya calcula la semana anterior menos el cierre anterior. Si el primer dato encontrado es cierre, entonces menos el cierre anterior.

Sub CalcularVarMes()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set b = Rows(2).Find("Var. Mes.", lookat:=xlWhole)
    If Not b Is Nothing Then
        col = b.Column
        fin = Columns("J").Column
        For i = 3 To Range("E" & Rows.Count).End(xlUp).Row
            encontrado = False
            For j = col - 1 To fin Step -1
                'actual - anterior
                Cells(i, col) = ""
                If InStr(1, Cells(2, j), "Cierre") > 0 Then
                    If IsNumeric(Cells(i, j)) And Cells(i, j) <> "" Then
                        If encontrado = False Then
                            actual = Cells(i, j)
                            encontrado = True
                        Else
                            anterior = Cells(i, j)
                            resultado = actual - anterior
                            Cells(i, col) = resultado
                            Exit For
                        End If
                    End If
                ElseIf IsDate(Cells(2, j)) Then
                    If IsNumeric(Cells(i, j)) And Cells(i, j) <> "" Then
                        If encontrado = False Then
                            actual = Cells(i, j)
                            encontrado = True
                        End If
                    End If
                End If
            Next
        Next
    End If
    MsgBox "Terminado", vbInformation
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

¡Gracias! No los SD. Salen porque en algunos casos el cierre de mayo es vacío. Y no se puede calcular un cierre de mayo vacío con uno de abril lleno. Sería un calculo incoherente. Como lo has programado esta muy bien. Me gusta la idea de buscar si el cierre esta vacío que busque el anterior. Le estoy haciendo pruebas. Te comentare si ocurre algo. Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas