Como pasar datos entre hojas condicionando fecha

Buenos días, a ver si me podéis ayudar.. Intentare explicarme lo mejor posible.
Tengo un excel, en el cual hay 2 hojas en un cargo unos datos que contienen en columnas texto, números y fechas.
El fichero en si debe tener unas 20 columnas y 400 filas más o menos.
Necesitaría poder seleccionar los datos de esa hoja "base" según criterio de fechas o sea necesito acumulado anual de 01.01.09 a la fecha de el cierre del mes que corresponda en este caso 30.09.09. (si se que se puede hacer con la opción de filtrar) pero lo que yo necesito es que todos los datos que se encuentren dentro de ese rango 01.01.09 a 30.09.09 ambos incluidos se me graven en una segunda hoja(hoja flitro acuml)
Lo que iría perfecto es que cuando cada mes yo cargase los nuevos datos en la hoja " base" se me actualizase la "hoja filtro acuml" automáticamente.
Lo he probado con fórmulas pero no me aclaro.
Si alguien me puede ayudar se lo agradecería mucho.
Atentamente
(xxxxxx)

2 Respuestas

Respuesta
1
Para poder ayudarte necesito que me indiques el número de la columna donde esta la fecha de cierre del mes es decir si esta en la columna A = 1, B = 2, etc. Para poder crear una función que pasa las filas que estén en el rango de fechas que necesites
La columna donde se encuentran las fechas es la AE nº de columna 31. Pero hay datos hasta la AN.
Muchas gracias,
(xxxxxx)
Tu requerimiento habla de 2 columnas la "A" y la "E", esas columnas contienen una fecha que deseas evaluar que este en un rango ejemplo: 01/09/2009 al 30/09/2009
en esta macro solo puedes evaluar una sola de las fechas cualquiera de las dos la que este en la columna A o E pero solo una; la fecha que este contenida en una de esas columnas es la que debe estar en el rango que tu determines.
Para hacer esto es necesario crear una macro en vba. Si no estas familiarizado con el editor de vba te indicare los pasos que debes seguir:
Te va a ir a la barra principal de excel y vas a darle el botón derecho del ratón sobre la barra justo después de donde esta la opción "Ayuda" (Help) puede ser en cualquier espacio de la barra después de la opción "Ayuda".
Te va a aparecer un menu contextual y debes seleccionar de allí la opción que dice "visual basic", se va a ctivar la barra de visual basic en el excel.
Luego le vas a dar clic al icono de esa barra que esta después de la opción "Seguridad..." (Security...), la etiqueta de ayuda que se muestra cuando pasas el cursor del ratón sobre el icono dice "Visual Basic Editor"
Una vez que le des clic va a aparecer el editor de vba, del lado izquierdo debes hacer clic sobre el primer objeto que aparece en el árbol de objetos el que dice "VBAProject("nombre de tu archivo excel".xls)", le das botón derecho del ratón y te aparecerá un menu contextual de donde debes seleccionar la opción "Insert" y después seleccionar "Module".
Seguidamente va a aparecer al final del árbol un icono con figura de "carpeta" que dice "Modules" debajo va a aparecer otro icono con el nombre de "Module1" sobre ese icono vas a hacer doble clic y del lado derecho va a aparecer el editor de código de vba que tiene un fondo blanco y arriba tiene 2 combo box que dicen (General) y (Declarations) en ese espacio en blanco debes colocar el código:
Type registros
    columna1 As String
    columna2 As String
    columna3 As String
    columna4 As String
    columna5 As String
    columna6 As String
    columna7 As String
    columna8 As String
    columna9 As String
    columna10 As String
    columna11 As String
    columna12 As String
    columna13 As String
    columna14 As String
    columna15 As String
    columna16 As String
    columna17 As String
    columna18 As String
    columna19 As String
    columna20 As String
    columna21 As String
    columna22 As String
    columna23 As String
    columna24 As String
    columna25 As String
    columna26 As String
    columna27 As String
    columna28 As String
    columna29 As String
    columna30 As String
    columna31 As String
End Type

Public Sub pasar_registros(ByVal hojaorigen As String, hojadestino As String, desde As Date, hasta As Date, numcolumna As Long)
Dim ultima_fila As Long
Dim ultima_fila2 As Long
Dim ultima_columna As Long
Dim fila As Long
Dim columna As Long
Dim I As Long
Dim J As Long
Dim fecha As Date
Dim fecana As Long
Dim fecdes As Long
Dim fechas As Long
Dim dia As String
Dim mes As String
Dim valores() As registros
If Month(desde) >= 1 And Month(desde) <= 9 Then
    mes = "0" & Month(desde)
Else
    mes = Month(desde)
End If
If Day(desde) >= 1 And Day(desde) <= 9 Then
    dia = "0" & Day(desde)
Else
    dia = Day(desde)
End If
fecdes = CLng(Year(desde) & mes & dia)
If Month(hasta) >= 1 And Month(hasta) <= 9 Then
    mes = "0" & Month(hasta)
Else
    mes = Month(hasta)
End If
If Day(hasta) >= 1 And Day(hasta) <= 9 Then
    dia = "0" & Day(hasta)
Else
    dia = Day(hasta)
End If
fechas = CLng(Year(hasta) & mes & dia)
ultima_fila = Worksheets(hojaorigen).Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ultima_columna = Worksheets(hojaorigen).Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Column
I = 1
ReDim valores(I)
For fila = 2 To ultima_fila
    If I = 1 Then
        If IsDate(Worksheets(hojaorigen).Cells(fila, numcolumna)) Then
            fecha = CDate(Worksheets(hojaorigen).Cells(fila, numcolumna))
            If Month(fecha) >= 1 And Month(fecha) <= 9 Then
                mes = "0" & Month(fecha)
            Else
                mes = Month(fecha)
            End If
            If Day(fecha) >= 1 And Day(fecha) <= 9 Then
                dia = "0" & Day(fecha)
            Else
                dia = Day(fecha)
            End If
            fecana = CLng(Year(fecha) & mes & dia)
            If fecana >= fecdes And fecana <= fechas Then
                Valores(I). columna1 = CStr(Worksheets(hojaorigen). Cells(fila, 1))
                Valores(I). columna2 = CStr(Worksheets(hojaorigen). Cells(fila, 2))
                Valores(I). columna3 = CStr(Worksheets(hojaorigen). Cells(fila, 3))
                Valores(I). columna4 = CStr(Worksheets(hojaorigen). Cells(fila, 4))
                Valores(I). columna5 = CStr(Worksheets(hojaorigen). Cells(fila, 5))
                Valores(I). columna6 = CStr(Worksheets(hojaorigen). Cells(fila, 6))
                Valores(I). columna7 = CStr(Worksheets(hojaorigen). Cells(fila, 7))
                Valores(I). columna8 = CStr(Worksheets(hojaorigen). Cells(fila, 8))
                Valores(I). columna9 = CStr(Worksheets(hojaorigen). Cells(fila, 9))
                Valores(I). columna10 = CStr(Worksheets(hojaorigen). Cells(fila, 10))
                Valores(I). columna11 = CStr(Worksheets(hojaorigen). Cells(fila, 11))
                Valores(I). columna12 = CStr(Worksheets(hojaorigen). Cells(fila, 12))
                Valores(I). columna13 = CStr(Worksheets(hojaorigen). Cells(fila, 13))
                Valores(I). columna14 = CStr(Worksheets(hojaorigen). Cells(fila, 14))
                Valores(I). columna15 = CStr(Worksheets(hojaorigen). Cells(fila, 15))
                Valores(I). columna16 = CStr(Worksheets(hojaorigen). Cells(fila, 16))
                Valores(I). columna17 = CStr(Worksheets(hojaorigen). Cells(fila, 17))
                Valores(I). columna18 = CStr(Worksheets(hojaorigen). Cells(fila, 18))
                Valores(I). columna19 = CStr(Worksheets(hojaorigen). Cells(fila, 19))
                Valores(I). columna20 = CStr(Worksheets(hojaorigen). Cells(fila, 20))
                Valores(I). columna21 = CStr(Worksheets(hojaorigen). Cells(fila, 21))
                Valores(I). columna22 = CStr(Worksheets(hojaorigen). Cells(fila, 22))
                Valores(I). columna23 = CStr(Worksheets(hojaorigen). Cells(fila, 23))
                Valores(I). columna24 = CStr(Worksheets(hojaorigen). Cells(fila, 24))
                Valores(I). columna25 = CStr(Worksheets(hojaorigen). Cells(fila, 25))
                Valores(I). columna26 = CStr(Worksheets(hojaorigen). Cells(fila, 26))
                Valores(I). columna27 = CStr(Worksheets(hojaorigen). Cells(fila, 27))
                Valores(I). columna28 = CStr(Worksheets(hojaorigen). Cells(fila, 28))
                Valores(I). columna29 = CStr(Worksheets(hojaorigen). Cells(fila, 29))
                Valores(I). columna30 = CStr(Worksheets(hojaorigen). Cells(fila, 30))
                Valores(I). columna31 = CStr(Worksheets(hojaorigen). Cells(fila, 31))
                I = I + 1
            End If
        End If
    Else
        If IsDate(Worksheets(hojaorigen).Cells(fila, numcolumna)) Then
            fecha = CDate(Worksheets(hojaorigen).Cells(fila, numcolumna))
            If Month(fecha) >= 1 And Month(fecha) <= 9 Then
                mes = "0" & Month(fecha)
            Else
                mes = Month(fecha)
            End If
            If Day(fecha) >= 1 And Day(fecha) <= 9 Then
                dia = "0" & Day(fecha)
            Else
                dia = Day(fecha)
            End If
            fecana = CLng(Year(fecha) & mes & dia)
            If fecana >= fecdes And fecana <= fechas Then
                ReDim Preserve valores(I)
                Valores(I). columna1 = CStr(Worksheets(hojaorigen). Cells(fila, 1))
                Valores(I). columna2 = CStr(Worksheets(hojaorigen). Cells(fila, 2))
                Valores(I). columna3 = CStr(Worksheets(hojaorigen). Cells(fila, 3))
                Valores(I). columna4 = CStr(Worksheets(hojaorigen). Cells(fila, 4))
                Valores(I). columna5 = CStr(Worksheets(hojaorigen). Cells(fila, 5))
                Valores(I). columna6 = CStr(Worksheets(hojaorigen). Cells(fila, 6))
                Valores(I). columna7 = CStr(Worksheets(hojaorigen). Cells(fila, 7))
                Valores(I). columna8 = CStr(Worksheets(hojaorigen). Cells(fila, 8))
                Valores(I). columna9 = CStr(Worksheets(hojaorigen). Cells(fila, 9))
                Valores(I). columna10 = CStr(Worksheets(hojaorigen). Cells(fila, 10))
                Valores(I). columna11 = CStr(Worksheets(hojaorigen). Cells(fila, 11))
                Valores(I). columna12 = CStr(Worksheets(hojaorigen). Cells(fila, 12))
                Valores(I). columna13 = CStr(Worksheets(hojaorigen). Cells(fila, 13))
                Valores(I). columna14 = CStr(Worksheets(hojaorigen). Cells(fila, 14))
                Valores(I). columna15 = CStr(Worksheets(hojaorigen). Cells(fila, 15))
                Valores(I). columna16 = CStr(Worksheets(hojaorigen). Cells(fila, 16))
                Valores(I). columna17 = CStr(Worksheets(hojaorigen). Cells(fila, 17))
                Valores(I). columna18 = CStr(Worksheets(hojaorigen). Cells(fila, 18))
                Valores(I). columna19 = CStr(Worksheets(hojaorigen). Cells(fila, 19))
                Valores(I). columna20 = CStr(Worksheets(hojaorigen). Cells(fila, 20))
                Valores(I). columna21 = CStr(Worksheets(hojaorigen). Cells(fila, 21))
                Valores(I). columna22 = CStr(Worksheets(hojaorigen). Cells(fila, 22))
                Valores(I). columna23 = CStr(Worksheets(hojaorigen). Cells(fila, 23))
                Valores(I). columna24 = CStr(Worksheets(hojaorigen). Cells(fila, 24))
                Valores(I). columna25 = CStr(Worksheets(hojaorigen). Cells(fila, 25))
                Valores(I). columna26 = CStr(Worksheets(hojaorigen). Cells(fila, 26))
                Valores(I). columna27 = CStr(Worksheets(hojaorigen). Cells(fila, 27))
                Valores(I). columna28 = CStr(Worksheets(hojaorigen). Cells(fila, 28))
                Valores(I). columna29 = CStr(Worksheets(hojaorigen). Cells(fila, 29))
                Valores(I). columna30 = CStr(Worksheets(hojaorigen). Cells(fila, 30))
                Valores(I). columna31 = CStr(Worksheets(hojaorigen). Cells(fila, 31))
                I = I + 1
            End If
        End If
    End If
Next fila
Worksheets(hojadestino).Cells(1, 1) = " "
ultima_fila2 = Worksheets(hojadestino).Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For fila = 1 To ultima_fila2
    Worksheets(hojadestino).Rows(fila).EntireRow.Delete
Next fila
For J = 1 To I - 1
    Worksheets(hojadestino).Cells(J, 1) = valores(J).columna1
    Worksheets(hojadestino).Cells(J, 2) = valores(J).columna2
    Worksheets(hojadestino).Cells(J, 3) = valores(J).columna3
    Worksheets(hojadestino).Cells(J, 4) = valores(J).columna4
    Worksheets(hojadestino).Cells(J, 5) = valores(J).columna5
    Worksheets(hojadestino).Cells(J, 6) = valores(J).columna6
    Worksheets(hojadestino).Cells(J, 7) = valores(J).columna7
    Worksheets(hojadestino).Cells(J, 8) = valores(J).columna8
    Worksheets(hojadestino).Cells(J, 9) = valores(J).columna9
    Worksheets(hojadestino).Cells(J, 10) = valores(J).columna10
    Worksheets(hojadestino).Cells(J, 11) = valores(J).columna11
    Worksheets(hojadestino).Cells(J, 12) = valores(J).columna12
    Worksheets(hojadestino).Cells(J, 13) = valores(J).columna13
    Worksheets(hojadestino).Cells(J, 14) = valores(J).columna14
    Worksheets(hojadestino).Cells(J, 15) = valores(J).columna15
    Worksheets(hojadestino).Cells(J, 16) = valores(J).columna16
    Worksheets(hojadestino).Cells(J, 17) = valores(J).columna17
    Worksheets(hojadestino).Cells(J, 18) = valores(J).columna18
    Worksheets(hojadestino).Cells(J, 19) = valores(J).columna19
    Worksheets(hojadestino).Cells(J, 20) = valores(J).columna20
    Worksheets(hojadestino).Cells(J, 21) = valores(J).columna21
    Worksheets(hojadestino).Cells(J, 22) = valores(J).columna22
    Worksheets(hojadestino).Cells(J, 23) = valores(J).columna23
    Worksheets(hojadestino).Cells(J, 24) = valores(J).columna24
    Worksheets(hojadestino).Cells(J, 25) = valores(J).columna25
    Worksheets(hojadestino).Cells(J, 26) = valores(J).columna26
    Worksheets(hojadestino).Cells(J, 27) = valores(J).columna27
    Worksheets(hojadestino).Cells(J, 28) = valores(J).columna28
    Worksheets(hojadestino).Cells(J, 29) = valores(J).columna29
    Worksheets(hojadestino).Cells(J, 30) = valores(J).columna30
    Worksheets(hojadestino).Cells(J, 31) = valores(J).columna31
Next J
End Sub


Una vez que este listo debes "Salvar" cierra la hoja de excel y vuelve a abrirla. En la barra de "visual basic" que agregaste justo después del icono que ya usaste "Visual basic Editor" aparece otro icono con la etiqueta de ayuda que se muestra cuando pasas el cursor del ratón que dice "Caja de Herramientas" (Control Toolbox) has clic sobre ese icono y paraceran las "opciones de la caja de herramientas".
Debes buscar allí un cuadro pequeño de color gris que cuando pasas el cursor del ratón la etiqueta de ayuda que aparece dice "Botón de Comando" (Command Button) has clic una vez sobre ese icono.
El cursor cambiara a un signo de suma (+) colocalo sobre la columna "AF" y has clic con el ratón aparecerá el botón insertado en la hoja, seguidamente has clic con el botón derecho del ratón y aparecerá un menu contextual selecciona la opción "View Code" y te mostrara de nuevo el editor de vba, el cursor aparecerá dentro del evento "CommandButton1_Click()":
Private Sub CommandButton1_Click()
El cursor aparece aqui..
End Sub

En ese lugar coloca este código:
Call pasar_registros("Hoja1", "Hoja2", #01/09/2009#, #30/09/2009#, 1)

Asumo que tienes en la Hoja1 los datos que quieres pasar y en la Hoja2 la hoja donde quieres que pasen el rango de fechas lo puedes cambiar use, 01/09/2009 a 30/09/2009 y la columna es la A que la numero 1 si quieres puedes usar la E que es la numero 5 "Salva" cierra el excel y vuelve a abrirlo, cuando le des clic al botón se aplicara el método.
Es muy importante que tengas en la fila uno de la Hoja1 los títulos de las columnas la función comienza a evaluar solo a partir de la fila 2
Una vez que le des clic pasaran las filas revisa la hoja destino después de hacer clic.
Recuerda que se borraran las filas que tengan en la hoja destino y pasaran las que estén en el rango de fechas columna A o E números 1 o 5

Hola (xxxxxx)
Quiero disculparme contigo por que me equivoque la columna que tiene la fecha es la columna AE = numero 31.
Tienes un total de 40 columnas que quieres pasar dependiendo del rango de fecha que determines columnas (A -AN)
Te enviare los pasos a seguir con las parámetros correctos
Disculpa mi error

Tu requerimiento habla de la columna "AE" número de columna 31, esa columna contienen una fecha que deseas evaluar que este en un rango ejemplo: 01/09/2009 al 30/09/2009 y hablas de 40 columnas desde la columna "A" hasta la columna "AN".
Para hacer esto es necesario crear una macro en vba. Si no estas familiarizado con el editor de vba te indicare los pasos que debes seguir:
Te vas a ir a la barra principal de excel y vas a darle el botón derecho del ratón sobre la barra justo después de donde esta la opción "Ayuda" (Help) puede ser en cualquier espacio de la barra después de la opción "Ayuda".
Te va a aparecer un menu contextual y debes seleccionar de allí la opción que dice "visual basic", se va a ctivar la barra de visual basic en el excel.
Luego le vas a dar clic al icono de esa barra que esta después de la opción "Seguridad..." (Security...), la etiqueta de ayuda que se muestra cuando pasas el cursor del ratón sobre el icono dice "Visual Basic Editor"
Una vez que le des clic va a aparecer el editor de vba, del lado izquierdo debes hacer clic sobre el primer objeto que aparece en el árbol de objetos el que dice "VBAProject("nombre de tu archivo excel".xls)", le das botón derecho del ratón y te aparecerá un menu contextual de donde debes seleccionar la opción "Insert" y después seleccionar "Module".
Seguidamente va a aparecer al final del árbol un icono con figura de "carpeta" que dice "Modules" debajo va a aparecer otro icono con el nombre de "Module1" sobre ese icono vas a hacer doble clic y del lado derecho va a aparecer el editor de código de vba que tiene un fondo blanco y arriba tiene 2 combo box que dicen (General) y (Declarations) en ese espacio en blanco debes colocar el código:
Type registros
    columna1 As String
    columna2 As String
    columna3 As String
    columna4 As String
    columna5 As String
    columna6 As String
    columna7 As String
    columna8 As String
    columna9 As String
    columna10 As String
    columna11 As String
    columna12 As String
    columna13 As String
    columna14 As String
    columna15 As String
    columna16 As String
    columna17 As String
    columna18 As String
    columna19 As String
    columna20 As String
    columna21 As String
    columna22 As String
    columna23 As String
    columna24 As String
    columna25 As String
    columna26 As String
    columna27 As String
    columna28 As String
    columna29 As String
    columna30 As String
    columna31 As String
    columna32 As String
    columna33 As String
    columna34 As String
    columna35 As String
    columna36 As String
    columna37 As String
    columna38 As String
    columna39 As String
    columna40 As String
End Type

Public Sub pasar_registros(ByVal hojaorigen As String, hojadestino As String, desde As Date, hasta As Date, numcolumna As Long)
Dim ultima_fila As Long
Dim ultima_fila2 As Long
Dim ultima_columna As Long
Dim fila As Long
Dim columna As Long
Dim I As Long
Dim J As Long
Dim fecha As Date
Dim fecana As Long
Dim fecdes As Long
Dim fechas As Long
Dim dia As String
Dim mes As String
Dim valores() As registros
If Month(desde) >= 1 And Month(desde) <= 9 Then
    mes = "0" & Month(desde)
Else
    mes = Month(desde)
End If
If Day(desde) >= 1 And Day(desde) <= 9 Then
    dia = "0" & Day(desde)
Else
    dia = Day(desde)
End If
fecdes = CLng(Year(desde) & mes & dia)
If Month(hasta) >= 1 And Month(hasta) <= 9 Then
    mes = "0" & Month(hasta)
Else
    mes = Month(hasta)
End If
If Day(hasta) >= 1 And Day(hasta) <= 9 Then
    dia = "0" & Day(hasta)
Else
    dia = Day(hasta)
End If
fechas = CLng(Year(hasta) & mes & dia)
ultima_fila = Worksheets(hojaorigen).Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ultima_columna = Worksheets(hojaorigen).Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Column
I = 1
ReDim valores(I)
For fila = 2 To ultima_fila
    If I = 1 Then
        If IsDate(Worksheets(hojaorigen).Cells(fila, numcolumna)) Then
            fecha = CDate(Worksheets(hojaorigen).Cells(fila, numcolumna))
            If Month(fecha) >= 1 And Month(fecha) <= 9 Then
                mes = "0" & Month(fecha)
            Else
                mes = Month(fecha)
            End If
            If Day(fecha) >= 1 And Day(fecha) <= 9 Then
                dia = "0" & Day(fecha)
            Else
                dia = Day(fecha)
            End If
            fecana = CLng(Year(fecha) & mes & dia)
            If fecana >= fecdes And fecana <= fechas Then
                Valores(I). columna1 = CStr(Worksheets(hojaorigen). Cells(fila, 1))
                Valores(I). columna2 = CStr(Worksheets(hojaorigen). Cells(fila, 2))
                Valores(I). columna3 = CStr(Worksheets(hojaorigen). Cells(fila, 3))
                Valores(I). columna4 = CStr(Worksheets(hojaorigen). Cells(fila, 4))
                Valores(I). columna5 = CStr(Worksheets(hojaorigen). Cells(fila, 5))
                Valores(I). columna6 = CStr(Worksheets(hojaorigen). Cells(fila, 6))
                Valores(I). columna7 = CStr(Worksheets(hojaorigen). Cells(fila, 7))
                Valores(I). columna8 = CStr(Worksheets(hojaorigen). Cells(fila, 8))
                Valores(I). columna9 = CStr(Worksheets(hojaorigen). Cells(fila, 9))
                Valores(I). columna10 = CStr(Worksheets(hojaorigen). Cells(fila, 10))
                Valores(I). columna11 = CStr(Worksheets(hojaorigen). Cells(fila, 11))
                Valores(I). columna12 = CStr(Worksheets(hojaorigen). Cells(fila, 12))
                Valores(I). columna13 = CStr(Worksheets(hojaorigen). Cells(fila, 13))
                Valores(I). columna14 = CStr(Worksheets(hojaorigen). Cells(fila, 14))
                Valores(I). columna15 = CStr(Worksheets(hojaorigen). Cells(fila, 15))
                Valores(I). columna16 = CStr(Worksheets(hojaorigen). Cells(fila, 16))
                Valores(I). columna17 = CStr(Worksheets(hojaorigen). Cells(fila, 17))
                Valores(I). columna18 = CStr(Worksheets(hojaorigen). Cells(fila, 18))
                Valores(I). columna19 = CStr(Worksheets(hojaorigen). Cells(fila, 19))
                Valores(I). columna20 = CStr(Worksheets(hojaorigen). Cells(fila, 20))
                Valores(I). columna21 = CStr(Worksheets(hojaorigen). Cells(fila, 21))
                Valores(I). columna22 = CStr(Worksheets(hojaorigen). Cells(fila, 22))
                Valores(I). columna23 = CStr(Worksheets(hojaorigen). Cells(fila, 23))
                Valores(I). columna24 = CStr(Worksheets(hojaorigen). Cells(fila, 24))
                Valores(I). columna25 = CStr(Worksheets(hojaorigen). Cells(fila, 25))
                Valores(I). columna26 = CStr(Worksheets(hojaorigen). Cells(fila, 26))
                Valores(I). columna27 = CStr(Worksheets(hojaorigen). Cells(fila, 27))
                Valores(I). columna28 = CStr(Worksheets(hojaorigen). Cells(fila, 28))
                Valores(I). columna29 = CStr(Worksheets(hojaorigen). Cells(fila, 29))
                Valores(I). columna30 = CStr(Worksheets(hojaorigen). Cells(fila, 30))
                Valores(I). columna31 = CStr(Worksheets(hojaorigen). Cells(fila, 31))
                Valores(I). columna32 = CStr(Worksheets(hojaorigen). Cells(fila, 32))
                Valores(I). columna33 = CStr(Worksheets(hojaorigen). Cells(fila, 33))
                Valores(I). columna34 = CStr(Worksheets(hojaorigen). Cells(fila, 34))
                Valores(I). columna35 = CStr(Worksheets(hojaorigen). Cells(fila, 35))
                Valores(I). columna36 = CStr(Worksheets(hojaorigen). Cells(fila, 36))
                Valores(I). columna37 = CStr(Worksheets(hojaorigen). Cells(fila, 37))
                Valores(I). columna38 = CStr(Worksheets(hojaorigen). Cells(fila, 38))
                Valores(I). columna39 = CStr(Worksheets(hojaorigen). Cells(fila, 39))
                Valores(I). columna40 = CStr(Worksheets(hojaorigen). Cells(fila, 40))
                I = I + 1
            End If
        End If
    Else
        If IsDate(Worksheets(hojaorigen).Cells(fila, numcolumna)) Then
            fecha = CDate(Worksheets(hojaorigen).Cells(fila, numcolumna))
            If Month(fecha) >= 1 And Month(fecha) <= 9 Then
                mes = "0" & Month(fecha)
            Else
                mes = Month(fecha)
            End If
            If Day(fecha) >= 1 And Day(fecha) <= 9 Then
                dia = "0" & Day(fecha)
            Else
                dia = Day(fecha)
            End If
            fecana = CLng(Year(fecha) & mes & dia)
            If fecana >= fecdes And fecana <= fechas Then
                ReDim Preserve valores(I)
                Valores(I). columna1 = CStr(Worksheets(hojaorigen). Cells(fila, 1))
                Valores(I). columna2 = CStr(Worksheets(hojaorigen). Cells(fila, 2))
                Valores(I). columna3 = CStr(Worksheets(hojaorigen). Cells(fila, 3))
                Valores(I). columna4 = CStr(Worksheets(hojaorigen). Cells(fila, 4))
                Valores(I). columna5 = CStr(Worksheets(hojaorigen). Cells(fila, 5))
                Valores(I). columna6 = CStr(Worksheets(hojaorigen). Cells(fila, 6))
                Valores(I). columna7 = CStr(Worksheets(hojaorigen). Cells(fila, 7))
                Valores(I). columna8 = CStr(Worksheets(hojaorigen). Cells(fila, 8))
                Valores(I). columna9 = CStr(Worksheets(hojaorigen). Cells(fila, 9))
                Valores(I). columna10 = CStr(Worksheets(hojaorigen). Cells(fila, 10))
                Valores(I). columna11 = CStr(Worksheets(hojaorigen). Cells(fila, 11))
                Valores(I). columna12 = CStr(Worksheets(hojaorigen). Cells(fila, 12))
                Valores(I). columna13 = CStr(Worksheets(hojaorigen). Cells(fila, 13))
                Valores(I). columna14 = CStr(Worksheets(hojaorigen). Cells(fila, 14))
                Valores(I). columna15 = CStr(Worksheets(hojaorigen). Cells(fila, 15))
                Valores(I). columna16 = CStr(Worksheets(hojaorigen). Cells(fila, 16))
                Valores(I). columna17 = CStr(Worksheets(hojaorigen). Cells(fila, 17))
                Valores(I). columna18 = CStr(Worksheets(hojaorigen). Cells(fila, 18))
                Valores(I). columna19 = CStr(Worksheets(hojaorigen). Cells(fila, 19))
                Valores(I). columna20 = CStr(Worksheets(hojaorigen). Cells(fila, 20))
                Valores(I). columna21 = CStr(Worksheets(hojaorigen). Cells(fila, 21))
                Valores(I). columna22 = CStr(Worksheets(hojaorigen). Cells(fila, 22))
                Valores(I). columna23 = CStr(Worksheets(hojaorigen). Cells(fila, 23))
                Valores(I). columna24 = CStr(Worksheets(hojaorigen). Cells(fila, 24))
                Valores(I). columna25 = CStr(Worksheets(hojaorigen). Cells(fila, 25))
                Valores(I). columna26 = CStr(Worksheets(hojaorigen). Cells(fila, 26))
                Valores(I). columna27 = CStr(Worksheets(hojaorigen). Cells(fila, 27))
                Valores(I). columna28 = CStr(Worksheets(hojaorigen). Cells(fila, 28))
                Valores(I). columna29 = CStr(Worksheets(hojaorigen). Cells(fila, 29))
                Valores(I). columna30 = CStr(Worksheets(hojaorigen). Cells(fila, 30))
                Valores(I). columna31 = CStr(Worksheets(hojaorigen). Cells(fila, 31))
                Valores(I). columna32 = CStr(Worksheets(hojaorigen). Cells(fila, 32))
                Valores(I). columna33 = CStr(Worksheets(hojaorigen). Cells(fila, 33))
                Valores(I). columna34 = CStr(Worksheets(hojaorigen). Cells(fila, 34))
                Valores(I). columna35 = CStr(Worksheets(hojaorigen). Cells(fila, 35))
                Valores(I). columna36 = CStr(Worksheets(hojaorigen). Cells(fila, 36))
                Valores(I). columna37 = CStr(Worksheets(hojaorigen). Cells(fila, 37))
                Valores(I). columna38 = CStr(Worksheets(hojaorigen). Cells(fila, 38))
                Valores(I). columna39 = CStr(Worksheets(hojaorigen). Cells(fila, 39))
                Valores(I). columna40 = CStr(Worksheets(hojaorigen). Cells(fila, 40))
                I = I + 1
            End If
        End If
    End If
Next fila
Worksheets(hojadestino).Cells(1, 1) = " "
ultima_fila2 = Worksheets(hojadestino).Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For fila = 1 To ultima_fila2
    Worksheets(hojadestino).Rows(fila).EntireRow.Delete
Next fila
For J = 1 To I - 1
    Worksheets(hojadestino).Cells(J, 1) = valores(J).columna1
    Worksheets(hojadestino).Cells(J, 2) = valores(J).columna2
    Worksheets(hojadestino).Cells(J, 3) = valores(J).columna3
    Worksheets(hojadestino).Cells(J, 4) = valores(J).columna4
    Worksheets(hojadestino).Cells(J, 5) = valores(J).columna5
    Worksheets(hojadestino).Cells(J, 6) = valores(J).columna6
    Worksheets(hojadestino).Cells(J, 7) = valores(J).columna7
    Worksheets(hojadestino).Cells(J, 8) = valores(J).columna8
    Worksheets(hojadestino).Cells(J, 9) = valores(J).columna9
    Worksheets(hojadestino).Cells(J, 10) = valores(J).columna10
    Worksheets(hojadestino).Cells(J, 11) = valores(J).columna11
    Worksheets(hojadestino).Cells(J, 12) = valores(J).columna12
    Worksheets(hojadestino).Cells(J, 13) = valores(J).columna13
    Worksheets(hojadestino).Cells(J, 14) = valores(J).columna14
    Worksheets(hojadestino).Cells(J, 15) = valores(J).columna15
    Worksheets(hojadestino).Cells(J, 16) = valores(J).columna16
    Worksheets(hojadestino).Cells(J, 17) = valores(J).columna17
    Worksheets(hojadestino).Cells(J, 18) = valores(J).columna18
    Worksheets(hojadestino).Cells(J, 19) = valores(J).columna19
    Worksheets(hojadestino).Cells(J, 20) = valores(J).columna20
    Worksheets(hojadestino).Cells(J, 21) = valores(J).columna21
    Worksheets(hojadestino).Cells(J, 22) = valores(J).columna22
    Worksheets(hojadestino).Cells(J, 23) = valores(J).columna23
    Worksheets(hojadestino).Cells(J, 24) = valores(J).columna24
    Worksheets(hojadestino).Cells(J, 25) = valores(J).columna25
    Worksheets(hojadestino).Cells(J, 26) = valores(J).columna26
    Worksheets(hojadestino).Cells(J, 27) = valores(J).columna27
    Worksheets(hojadestino).Cells(J, 28) = valores(J).columna28
    Worksheets(hojadestino).Cells(J, 29) = valores(J).columna29
    Worksheets(hojadestino).Cells(J, 30) = valores(J).columna30
    Worksheets(hojadestino).Cells(J, 31) = valores(J).columna31
    Worksheets(hojadestino).Cells(J, 32) = valores(J).columna32
    Worksheets(hojadestino).Cells(J, 33) = valores(J).columna33
    Worksheets(hojadestino).Cells(J, 34) = valores(J).columna34
    Worksheets(hojadestino).Cells(J, 35) = valores(J).columna35
    Worksheets(hojadestino).Cells(J, 36) = valores(J).columna36
    Worksheets(hojadestino).Cells(J, 37) = valores(J).columna37
    Worksheets(hojadestino).Cells(J, 38) = valores(J).columna38
    Worksheets(hojadestino).Cells(J, 39) = valores(J).columna39
    Worksheets(hojadestino).Cells(J, 40) = valores(J).columna40
Next J
End Sub

Una vez que este listo debes "Salvar" cierra la hoja de excel y vuelve a abrirla. En la barra de "visual basic" que agregaste justo después del icono que ya usaste "Visual basic Editor" aparece otro icono con la etiqueta de ayuda que se muestra cuando pasas el cursor del ratón que dice "Caja de Herramientas" (Control Toolbox) has clic sobre ese icono y paraceran las "opciones de la caja de herramientas".
Debes buscar allí un cuadro pequeño de color gris que cuando pasas el cursor del ratón la etiqueta de ayuda que aparece dice "Botón de Comando" (Command Button) has clic una vez sobre ese icono.
El cursor cambiara a un signo de suma (+) colocalo sobre la columna "AO" y has clic con el ratón aparecerá el botón insertado en la hoja, seguidamente has clic con el botón derecho del ratón y aparecerá un menu contextual selecciona la opción "View Code" y te mostrara de nuevo el editor de vba, el cursor aparecerá dentro del evento "CommandButton1_Click()":
Private Sub CommandButton1_Click()
El cursor aparece aqui..
End Sub
En ese lugar coloca este código:
Call pasar_registros("Hoja1", "Hoja2", #01/09/2009#, #30/09/2009#, 31)
Asumo que tienes en la Hoja1 los datos que quieres pasar y es en la Hoja2 donde quieres que pasen; el rango de fechas lo puedes cambiar yo use, 01/09/2009 a 30/09/2009 y la columna es la "AE" que es la número 31 "Salva" cierra el excel y vuelve a abrirlo, cuando le des clic al botón se aplicara el método.
Es muy importante que tengas en la fila uno de la Hoja1 los títulos de las columnas la función comienza a evaluar solo a partir de la fila 2. Una vez que le des clic pasaran las filas, revisa la hoja destino después de hacer el clic.
Recuerda que se borraran todas las filas en la hoja destino y pasaran las que estén en el rango de fechas que determinaste (columna "AE" número: 31)
Hola desenex41, muchas gracias por tu guía, me ha ido genial porque yo de VB nada.
Pero sigo con un problemilla, la verdad es que si me hace el filtro de los datos, pero es queme cambia las fechas en la hoja destino. A ver si me se expliacar
en el texto de VB donde pongo:
Call pasar_registros("Hoja1", "Hoja2", #01/09/2009#, #30/09/2009#, 31)
Al grabar se me convierte es:
Call pasar_registros("Hoja1", "Hoja2", #1/9/2009#, #9/30/2009#, 31)
Por lo que me cambia la fecha de los datos que flitra y no me salen los correctos.
¿Te agradecería me dijeras que debo hacer para que me saque los datos bien?
Muchas gracias,
(xxxxxx)
Perdona nuevamente, he estado mirando lo de la macros, y no había caído que como los rangos de fechas para traspasar los datos se tienen que ir cambiando mensualmente, deberemos entrar cada mes dentro del VB para modificarlo.
Mi pregunta es se puede hacer que la macros filtre dentro de los parámetros de fechas que se le indica, pero que este parámetro de fecha se pueda introducir desde fuera del VB directamente en la Hoja Excel... no se mucho del tema por no decir casi casi nada, pero he estado mirando y he encontrado que si en una felda pones algo como fecha ini y en la de lado la fecha que quieres y en la de abajo pones Fecha fin y la fecha... o sea en la hoja excel quedaría algo así
Fecha ini    01/01/2009
Fecha fin 30/09/2009
y luego detro del VB introducies la funcion
MsgBox (Format(Range("AZ1").value, "dd/mm/yyyy")) o algo parecido,  la fecha la podran poner desde fuera y no me pasara lo de que al ejecutarlo me cambia el sentido o formato de las fechas......
La verdad es que si puedo evitar que nadie entre dentro del VB me evito que lo desconfigure... pero como te he dicho he estado mirando, y no estoy segura de si se puede hacer, ni de como se hace exactamente...
Te agradecería tu ayuda nuevamente
Atentamente
(xxxxxx)
El problema con la primera pregunta que me hiciste es simple, cuando escribes las fechas en la función entre el carácter "#" el vba internamente te esta cambiando el formato que usamos la mayoría de dd/mm/aaaa al formato americano mm/dd/aaaa, es decir si colocas en la fecha desde: #01/09/2009# se va cambiar a formato americano primero el mes, después el día y por ultimo el año es decir: #9/1/2009# igual ocurre con la fecha hasta: #30/09/2009# cambia a #9/30/2009#.
En realidad debería de aplicarse el filtro sin problema, ahora si quieres que se pueda cargar las fecha a través de una instrucción llamada "INPUTBOX", voy a ser las pruebas y cuando lo tenga listo te lo envío
Referente a que me pruebes lo del INPUTBOX, muchas gracias.
Y referente a lo de la fecha, ya entiendo porque pasa, pero debería a ver alguna manera para que eso no pase, ya que si me saca las fechas cambiadas, sí yo lo se pero como de los datos filtrados saco tablas dinámicas y otros datos, es un lio... si hubiera la forma de que me no me trasformase el formato de fecha seria perfecto.
Muchas gracias,
(xxxxxx)
Ya tengo una solución al problema dedes seguir estos pasos:
Primero espero que no hayas quitado la barra de vba que al principio activaste para poder colocar las funciones, si la quitaste vuelve a seguir los pasos que te indique para que aparezca.
Una vez que tengas la barra de vba visible en la hoja donde insertaste el botón en la celda "AO", busca en la barra de vba el icono que tiene unas regla y un lápiz que cuando pasas el cursor del ratón aparece la etiqueta de ayuda "Modo de Diseño" (Design Mode), le das clic una vez y luego le das clic al botón insertado en la celda "AO", luego le das botón derecho del ratón y seleccionas la opción "Ver Código" (View Code).
Borra la linea de código:
Call pasar_registros("Sheet1", "Sheet2", #9/1/2009#, #9/30/2009#, 31)

Y coloca este código:
Dim msg, titulo, inicio, final, valor1, valor2
Dim desde As Date
Dim hasta As Date
inicio = DateSerial(Year(Now), Month(Now) + 0, 1)
final = DateSerial(Year(Now), Month(Now) + 1, 0)
titulo = "Rango de Fechas"
msg = "Coloque la fecha desde en formato dd/mm/aaaa: "
valor1 = InputBox(msg, titulo, inicio)
msg = "Coloque la fecha hasta en formato dd/mm/aaaa: "
valor2 = InputBox(msg, titulo, final)
If IsDate(valor1) And IsDate(valor2) Then
    desde = CDate(valor1)
    hasta = CDate(valor2)
    Call pasar_registros("Sheet1", "Sheet2", desde, hasta, 31)
Else
    MsgBox "Error en las fechas desde y hasta por favor vuelva a intentarlo...", vbCritical, "Mensaje de Error"
End If



Este rutina te permite tener 2 inputbox para cargar las fechas desde y hasta que tendrán como valores iniciales el primer día y el ultimo día del mes correspondiente a la fecha activa que tengas en tu windows, cuando cambien el mes cambiaran los valores iniciales automáticamente.
Prueba la rutina espero que te sea útil...
Disculpa olvide algo muy importante en el código que debes colocar el botón deje los nombres de las hojas origen y destino en ingles "Sheet1" y "Sheet2" debes cambiarlas a los nombre que tu utilizasa imagino que son "Hoja1" y "Hoja2", debe quedar así:
Dim msg, titulo, inicio, final, valor1, valor2
Dim desde As Date
Dim hasta As Date
inicio = DateSerial(Year(Now), Month(Now) + 0, 1)
final = DateSerial(Year(Now), Month(Now) + 1, 0)
titulo = "Rango de Fechas"
msg = "Coloque la fecha desde en formato dd/mm/aaaa: "
valor1 = InputBox(msg, titulo, inicio)
msg = "Coloque la fecha hasta en formato dd/mm/aaaa: "
valor2 = InputBox(msg, titulo, final)
If IsDate(valor1) And IsDate(valor2) Then
    desde = CDate(valor1)
    hasta = CDate(valor2)
    Call pasar_registros("Hoja1", "Hoja2", desde, hasta, 31)
Else
    MsgBox "Error en las fechas desde y hasta por favor vuelva a intentarlo...", vbCritical, "Mensaje de Error"
End If
Disculpalme por olvidar el detalle de las fechas utiliza este código que tiene el Format para las fechas desde y hasta:
Dim msg, titulo, inicio, final, valor1, valor2
Dim desde As Date
Dim hasta As Date
inicio = DateSerial(Year(Now), Month(Now) + 0, 1)
final = DateSerial(Year(Now), Month(Now) + 1, 0)
titulo = "Rango de Fechas"
msg = "Coloque la fecha desde en formato dd/mm/aaaa: "
valor1 = InputBox(msg, titulo, Format(inicio, "dd/mm/yyyy"))
msg = "Coloque la fecha hasta en formato dd/mm/aaaa: "
valor2 = InputBox(msg, titulo, Format(final, "dd/mm/yyyy"))
If IsDate(valor1) And IsDate(valor2) Then
    desde = CDate(valor1)
    hasta = CDate(valor2)
    Call pasar_registros("Hoja1", "Hoja2", desde, hasta, 31)
Else
    MsgBox "Error en las fechas desde y hasta por favor vuelva a intentarlo...", vbCritical, "Mensaje de Error"
End If
Respuesta

http://www.programarexcel.com/2013/03/informe-busca-entre-fecha-y-fecha.html 

Hola mira este ejemplo quizás se adapte a lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas