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

Preguntas similare

Leer las respuestas

#6 Ivan
09/07/2007 - 05:30 | Informe spam
On 9 jul, 02:48, "Héctor Miguel"
wrote:
P.D. [por si no estuviera claro]:

Ivan: [hasta donde se] las propuestas que se hacen [precisamente]
-> son para que cada quien les adapte mejoras segun sea su mejor conveniencia
recuerda que son solamente *eso*: propuestas basadas en los datos que se desprenden de una consulta

-> lo que [me parece que] no hay que olvidar, es que "trabajar con fechas en excel y vba..." :))

saludos,
hector.




hola Hector (y Feliciano),

el *razonamiento* fue precisamente para no tener que *procuparme* por algunos factores
[como convencionalismos regionales, formatos, formulas, etc.] p.e.:



-> lo que [me parece que] no hay que olvidar, es que "trabajar con fechas en excel y vba..." :))



como siempre, se me escapan las mejores y vuelvo a caer en el mismo
'error'. Tienes razon, Hector, pero la verdad es que me 'gusto' tanto
la combinacion de resize/insert que me puse a practicar y al sacar el
codigo no pense en mucho mas.

"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:"

lo unico que me dio la impresion de que a OP lo que le interesaba era
obtener todos los dias del año introducido en B1, de ahi la adaptacion

en cualquier caso, me parece alucinante tu codigo, por muy sencillo
que pueda parecer. Gracias una vez mas por el. Lo añado a la saca.

bueno, disculpas por la intromision y un saludo
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida