Pasar datos dependientes de dos criterios

Del foro, quisiera que me ayudaran con lo siguiente:

En la hoja3

Tengo una base de datos que contiene 2,000 alumnos con sus datos desde la columna A hasta la columna V y quisiera que me pasara todos los datos a las siguientes hojas, Primero-A, Primero-B, Primero-C... Etc ( 30 hojas )

Pero utilizando 2 criterios los cuales se encuentran en la columna N y O,

N =el grado (primero,segundo,tercero,cuarto,quinto,sexto)

O =la sección (A, B, C, D, E)

Explicado lo anterior:

Lo que necesito es que me pase los datos pero específicamente los que pertenecen a determinado criterio,, ejemplo: si hay en la base de datos 45 alumnos de primero-A, pues que pase a la hoja de Primero - A, los 45 alumnos.

Esto yo lo intente con filtrado y lo intente con una tabla dinámica, con el filtrado me funciona casi perfecto, el problema es que yo tomo de las base de dato de grado (Primero-A)

Pero cuando copio determinado dato, me pasa hasta los datos ocultos y eso me genera un problema.

Entonces quisiera que me ayudaran a filtrar o pasar esos datos con una macros.

Estaré muy agradecido por su ayuda.

1 respuesta

Respuesta
1

Con el filtrado debieras poder... quizás no esté totalmente correcta la instrucción. Escribime aquí la macro para que pueda ajustarla.

gracias por la respuesta pronta.

creo que no me di a entender, lo que yo hice fue copiar por media de una conexión los datos de la tabla base de datos a las demás hojas.(copiar tabla), ,, y luego aplique con el filtro los criterios y genere lo que necesitaba,, pero el problema que cuando copio el dato de alguna columna, me pasa hasta los que están ocultos....

por lo tanto no tengo ninguna macro,, sino que mi petición es que me ayuden generándome con macros el código, ya que yo de macros no se nada...

agrego: todas las hojas tienen un encabezado 3 filas y de la columna A hasta la V.

agradeceré mucho de su ayuda.

Entendido. ¿Con qué versión estás trabajando?

office 2010

Bien, entonces una vez que tengas tu tabla filtrada podes ejecutar con un botón o un atajo de teclado (*) esta rutina que tendrás colocada en un módulo del Editor.

Sub filtro_col()

'x Elsamatilde

'solo se copian las 2 col de datos filtrados

Columns("N:O").Select
Selection.Copy
Sheets("Hoja4").Select
ActiveSheet.Paste

End Sub

Otra opción es copiar todas las filas filtradas completas:

Sub filtra_todo()
'x Elsamatilde
'
'copia las filas filtradas en otra hoja
finfila = Range("N65536").End(xlUp).Row
Rows("1:" & finfila).Select
Selection.Copy
Sheets("Hoja4").Select
Range("A4").Select
ActiveSheet.Paste
End Sub

(*) Estos temas los tengo explicados en la sección Macros de mi sitio.

Sdos

Elsa

he probado la macros, pero no hace nada de filtrado, solo aparece el área en las dos columnas.

estoy viendo que en la macro no especifica que es lo que filtrara,, y lo que dice es copiar dos columnas, bueno solo es una lógica mia,, creo que seré mas explicativo de lo que quiero:

hoja4

si tengo 3 filas llenas de datos

de la columna A:V.

v - josue - 988 - si - no - primero - B - arenal - colonia

n - maría - 766 - si - no - primero - A - coyolito - barrio

v - juan - 254 - si - no - segundo - A - arada - barrio

pero de estos 3, solo uno es de col.N(Primero) col.O(A), significa que me pasara a la hoja5 los datos completos de la A:V todos los que pertenezcan a Primero - A

n - maría - 766 - si - no - primero - A - coyolito - barrio

espero haberme dado a entender en esta ocasión.

Las macros trabajan sobre un rango ya filtrado.

Parece claro tu mensaje: '... luego aplique con el filtro los criterios y genere lo que necesitaba,, pero el problema que cuando copio ...'

Entendí que lo necesitabas una vez ya filtrado...

Dame tiempo para ajustarla.

esta bien, gracias

Aquí vá con el filtrado. Los criterios los coloqué en la misma Hoja3, en fila1 a partir de col AA (27). El código vá explicado, leelo con atención y no tendrás dificultad en adaptarlo a tu libro.

Sub filtra_todo()
'x Elsamatilde
'
'lista de criterios a partir de col 27 es decir AA:AF (Primero-Segundo, etc) y col 33 para AG:AK (A, B, etc)
'se trabaja desde Hoja3 y se guarda la última fila del rango
Sheets("Hoja3").Select
'para no ver el movimiento de hojas
Application.ScreenUpdating = False
filax = Range("N65536").End(xlUp).Row
'se recorren los rangos de criterios. Por cada opción se filtra
For i = 27 To 32
For x = 33 To 37
Range("A1").Select
Selection.AutoFilter
Range("$A$1:$V$" & filax).AutoFilter Field:=14, Criteria1:=Cells(1, i)
Range("$A$1:$V$" & filax).AutoFilter Field:=15, Criteria1:=Cells(1, x)
'copia las filas filtradas en otra hoja cuyo nombre es la cadena de criterios
nbrehoja = Cells(1, i) & "-" & Cells(1, x)
'busco la última fila filtrada
finfila = Range("N65536").End(xlUp).Row
'copio a partir de la 2 hasta el fin
Rows("2:" & finfila).Select
Selection.Copy
On Error GoTo OtraHoja
Sheets(nbrehoja).Select
'pega a partir de fila 2
ActiveSheet.Range("A2").Select
ActiveSheet.Paste
ActiveSheet.Range("A2").Select
OtraHoja:
'vuelvo a la hoja, quito filtro anterior y filtro x el siguiente criterio
Sheets("Hoja3").Select
'muestro todos los valores para repetir con otro criterio
ActiveSheet.Range("$A$1:$V$43").AutoFilter Field:=14
ActiveSheet.Range("$A$1:$V$43").AutoFilter Field:=15
Application.CutCopyMode = False
Next x
Next i
ActiveSheet.Range("A2").Select
MsgBox "Fin del proceso"

le contare las acciones y espero no molestar demasiado:

1.en un principio tuve un error Sheets(nbrehoja).Select, por la lógica le puse "nbrehoja" y logre solucionarlo.

2.me filtra muy bien pero en algunas ocasiones no me pasa a la otra hoja un nombre que tiene el mismo criterio especifico.

3.ahora bien utilice nbrehoja para filtrar los de Primero - A, pero allí muere la macro.

si no me explique mil disculpas, pero necesito filtrar a;

Primero - B en otra hoja (PrimeroB) y filtrar a Primero - C a la hoja (PrimeroC) y asi sucesivamente.

4. estuve pensando hacer un modulo para cada grado pero seria una pesadia escribiendo criterios y borrando para el próximo en la hoja3

las hojas en total son 5 aulas de primero a sexto, pero que sea un solo código, para activar todo de un solo, si se pudiera. . agradezco su paciencia.

Presta atención a cada detalle que aclaro en la macro y presta atención a cada pto solicitado en tus entradas anteriores.

Una macro requiere de datos precisos, por ej:

1 - me pasara todos los datos a las siguientes hojas, Primero-A, Primero-B, Primero-C

Ahora dices que las hojas se llaman PrimeroB, PrimeroC y así.

Entonces tenés que modificar la línea donde armo la cadena con el nombre de hoja y quitarle el guión:

nbrehoja = Cells(1, i) & Cells(1, x)


2- Si la instrucción dice: Sheets(nbrehoja).Select  así debe ir, sin comillas. Es posible que necesites definirla si tu Editor está en ese modo por lo que podés agregar una línea al inicio:

Sub filtra_todo()
'x Elsamatilde
Dim nbrehoja as String


3- No pienses en ningún módulo ni nada extraño. La macro está perfecta para lo que necesitas, solo debes seguir los pasos y ser preciso en los rangos que te menciono o ajustarlos pero siguiendo este modelo. Por ej los criterios están de corrido en la fila 1. Si cambiás de ubicación y los colocás en otras col (x ej a partir de BA) debés ajustar esto en la macro.


4- Insisto: una macro debe contar con referencias precisas. No se puede solicitar una macro y luego tratar de hacer cambios a antojo... si no entendés cómo está planteada podés solicitarme el libro de ejemplo al correo que aparece en mi sitio (o dejame un correo tuyo para enviártelo). Quizás haya algo que no lo estás adaptando correctamente.



tienes toda la razón, el problema era yo,,,, pero una ultima cosita que no estaba planteada:

mera al ejecutar la macro me filtra todos los nombres y me los distribuye cada uno donde corresponde, tu macros es inmejorable.

pero tengo un problemita:

después de filtrar la base de datos,,,, a veces llegan alumnos nuevos y por lo tanto tengo que agregarlos, entonces estuve haciendo pruebas y igual me los filtra y los pasa al grado correspondiente, pero me sale el cuadrito finalizar o depurar,, yo le doy finalizar y ya.

pero si pudieras corregir eso te agradeceré,,,, prometo cerrar y puntear después de esta respuesta.... graciassssssss

aclarare mas:

después de filtrar toda la base de datos,,, igualmente al ingresar los nuevos datos me los filtra también, con la diferencia que en esta ocasión me sale el dicho cuadrito.

y otra cosa, pero si la hoja la tengo oculta, allí si no me filtra nada,, me pregunto no se puede ocultar..si no se puede pues ni modo asi quedara.

ya con esta respuesta estaré muy agradecido por su paciencia y labor artruista.

Hoy es domingo... seguimos mañana, mientras vas pensando que otro detalle tienen tus hojas ;(

espera hasta mañana:

aprovechare la oportunidad me gustaría que ampliáramos de primero a noveno, las aulas las mismas de A a la E, solo los grados.

por lo tanto estas lineas cambiarían y no se cual otra.

For i = 27 To 32
For x = 33 To 37

pero no me atrevo ya que puedo desordenar algo.

El posible error puede deberse a que tu rango vá más allá de la fila 43. Reemplazá estas líneas:

ActiveSheet.Range("$A$1:$V$43").AutoFilter Field:=14

y dejalas con la variable, en las 2:

ActiveSheet.Range("$A$1:$V$" & filax).AutoFilter Field:=14

ActiveSheet.Range("$A$1:$V$" & filax).AutoFilter Field:=15

Los rangos quedan así con el agregado:

For i = 27 To 35 'col AA:AI
For x = 36 To 40 'col AJ:AN

Contalas x las dudas. Si vas a cambiar de ubicación cambiá la numeración.

Ya no acepto ningún cambio ni re-preguntas en esta consulta... si algo falta, por favor finalizá ésta y dejá una nueva consulta a mi nombre para que la continuemos.

Quiero darle las gracias por toda la ayuda brindada a mi en particular y el gran trabajo que realiza en este foro, a todos los que necesitamos una ayuda.... felicidades y siga adelante.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas