Insertar filas entre dos

08/07/2007 - 13:11 por Feliciano | Informe spam
Hola a todos:
En el desarrollo de una macro necesito incluir una instruccion para insertar
tantas lineas como las indicadas con la siguiente formula:
+SI(RESIDUO(B1;4)>0;365;366)-2 donde B1 es un año determinado; por ejemplo
para el año 2007 nos daria 363 y para el 2008 año bisiesto nos daria 364.
Esta cantidad de lineas son las que necesito insertar entre el primer y
ultimo dia del año que se encuentran respectivamente en las celdas A4 y A5
(antes de insertar).
La idea es registrar desde la celda A4 (primer dia del año) todos los dias
del año con solo introducir el año en la celda B1.
En la macro expuesta inserto solo 5 filas hasta no averiguar como se
insertan 364 o 363 (en funcion de si el año es o no bisiesto).

Gracias anticipadas y saludos cordiales,

Feliciano.

Nota: a continuacion pego las instrucciones que llevo hasta ahora; seguro
que es mejorable y en este sentido agradeceria vuestros comentario:
Sub Macro1()
'
' Macro1 Macro
' Macro grabada el 08/07/2007
'
' Antes de nada nos posicionamos en B2 para indicar el año; por ejemplo
2007.
'
Range("D1").Select
'
' Con ActiveCell.FormulaR1C1 = "=+IF(MOD(RC[-2],4)>0,365,366)" calculamos
los días
' que tiene el año indicado en B2; para 2007 como ejemplo arroja 365.
'
ActiveCell.FormulaR1C1 = "=+IF(MOD(RC[-2],4)>0,365,366)"
'
Range("A4").Select
'
' Con ActiveCell.FormulaR1C1 = "=+DATE(R[-3]C[1],1,1)" calculamos y grabamos
el
' primer día del año; para 2007 del ejemplo arroja 01/01/2007
'
ActiveCell.FormulaR1C1 = "=+DATE(R[-3]C[1],1,1)"
'
Range("A5").Select
'
' Con ActiveCell.FormulaR1C1 = "=+R[-1]C+R[-4]C[3]-1" calculo y grabo el
último día
' del año; para el año 2007 del ejemplo sería 31/12/2007.
'
ActiveCell.FormulaR1C1 = "=+R[-1]C+R[-4]C[3]-1"
'
' Con Selection.EntireRow.Insert se inserta una fíla. Como aún estoy en la
celda
' A5 e introduzco 5 veces la misma instrucción [cuestión pendiente hasta
saber ¿cómo
' introducir directamente las 363 filas necesarias?], la fecha 31/12/2007
pasa de
' la celda A5 a la celda A10.
'
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
Selection.EntireRow.Insert
'
' Con ActiveCell.FormulaR1C1 = "=+R[-1]C+1" calculo y grabo el segundo día
del año;
' para el año 2007 del ejemplo ya teníamo informado en A4 el primer día del
año
' y como aún sigo estando en A5 basta con añadir 1 al contenido de A4
obtenemos
' 02/01/2007.
'
ActiveCell.FormulaR1C1 = "=+R[-1]C+1"
'
Selection.Copy
Range("A6").Select
ActiveSheet.Paste
'
' Con Application.CutCopyMode = False no sé realmente lo que hace ¿no corte
el contenido?
'
Application.CutCopyMode = False
'
' Con Selection.AutoFill Destination:=Range("A6:A9"), Type:=xlFillDefault
¿se indica
' el destino de pegado con formato defecto igual al de origen?
Selection.AutoFill Destination:=Range("A6:A9"), Type:=xlFillDefault
Range("A6:A9").Select
Range("A4").Select
'
End Sub

 

Leer las respuestas

#1 Héctor Miguel
08/07/2007 - 20:42 | Informe spam
hola, Feliciano !

En... una macro necesito... una instruccion para insertar tantas lineas como las indicadas con la siguiente formula:
+SI(RESIDUO(B1;4)>0;365;366)-2
donde B1 es un a#o determinado; por ejemplo para el a#o 2007 nos daria 363 y para el 2008 a#o bisiesto nos daria 364.
... lineas... que necesito insertar entre el primer y ultimo dia del a#o que se encuentran respectivamente en... A4 y A5 (antes de insertar).
La idea es registrar desde la celda A4 (primer dia del a#o) todos los dias del a#o con solo introducir el a#o en la celda B1.
En la macro expuesta inserto solo 5 filas hasta no averiguar como se insertan 364 o 363 (en funcion de si el a#o es o no bisiesto)...



con el siguiente procedimiento [como ejemplo] solo necesitas tener dos fechas: la inicial y la final [p.e. en 'A4' y 'A5']
los dias [o fechas] entre ambas son 'ajustados' [insertados y rellenados] por el codigo:

Sub Fechas_consecutivas()
Dim Dias_faltantes As Long
With Range("a4")
Dias_faltantes = CLng(CDate(.Offset(1))) - CLng(CDate(.Value)) - 1
.Offset(1).Resize(Dias_faltantes).EntireRow.Insert
.AutoFill .Resize(Dias_faltantes + 1), xlFillDays
End With
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Preguntas similares